template struct OutputSerialization_concept { void constraints() { ar << t; } T t; OArchive ar; }; template struct InputSerialization_concept { void constraints() { ar >> t; } T t; IArchive ar; }; template struct Serialization_concept { void constraints() { function_requires >(); function_requires >(); } }; Concept can be validated as follows : ===================================== function_requires >(); function_requires >(); function_requires >();