Since operator>> takes the engine with template parameters for subtract_with_carry_engine and discard_block_engine classes we have multiple competing definitions in the same namespace when 2 or more of these engine types are instantiated.
Therefore, it's necessary to move the definition outside of the class, then it's only defined once, and add its declaration before the class definition.
Since
operator>>
takes the engine with template parameters forsubtract_with_carry_engine
anddiscard_block_engine
classes we have multiple competing definitions in the same namespace when 2 or more of these engine types are instantiated. Therefore, it's necessary to move the definition outside of the class, then it's only defined once, and add its declaration before the class definition.