#include <type_traits>
struct CByteArray { } ;
struct CIODevice {
template < typename T>
CIODevice& operator<< ( T value)
{
static_assert( std:: is_pod < T> :: value , "This method is only intended for POD types" ) ;
return * this ;
}
template <>
CIODevice& operator<< ( CByteArray data)
{
return * this ;
}
template < typename T>
CIODevice& operator>> ( T& value)
{
static_assert( std:: is_pod < T> :: value , "This method is only intended for POD types" ) ;
return * this ;
}
} ;
int main( )
{
CIODevice device;
int i = 0 ;
device << i;
device >> i;
return 0 ;
}
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKc3RydWN0IENCeXRlQXJyYXkge307CgpzdHJ1Y3QgQ0lPRGV2aWNlIHsKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CglDSU9EZXZpY2UmIG9wZXJhdG9yPDwgKFQgdmFsdWUpCgl7CgkJc3RhdGljX2Fzc2VydChzdGQ6OmlzX3BvZDxUPjo6dmFsdWUsICJUaGlzIG1ldGhvZCBpcyBvbmx5IGludGVuZGVkIGZvciBQT0QgdHlwZXMiKTsKCQlyZXR1cm4gKnRoaXM7Cgl9CgoJdGVtcGxhdGUgPD4KCUNJT0RldmljZSYgb3BlcmF0b3I8PCAoQ0J5dGVBcnJheSBkYXRhKQoJewoJCXJldHVybiAqdGhpczsKCX0KCgl0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KCUNJT0RldmljZSYgb3BlcmF0b3I+PiAoVCYgdmFsdWUpCgl7CgkJc3RhdGljX2Fzc2VydChzdGQ6OmlzX3BvZDxUPjo6dmFsdWUsICJUaGlzIG1ldGhvZCBpcyBvbmx5IGludGVuZGVkIGZvciBQT0QgdHlwZXMiKTsKCQlyZXR1cm4gKnRoaXM7Cgl9Cn07CgppbnQgbWFpbigpCnsKCUNJT0RldmljZSBkZXZpY2U7CglpbnQgaSA9IDA7CglkZXZpY2UgPDwgaTsKCWRldmljZSA+PiBpOwoJcmV0dXJuIDA7Cn0=
compilation info
prog.cpp:13:12: error: explicit specialization in non-namespace scope ‘struct CIODevice’
template <>
^
prog.cpp:20:11: error: too many template-parameter-lists
CIODevice& operator>> (T& value)
^
prog.cpp: In function ‘int main()’:
prog.cpp:32:9: error: no match for ‘operator>>’ (operand types are ‘CIODevice’ and ‘int’)
device >> i;
^
stdout