#include <iostream>
using namespace std;
template< typename T >
class Container;
template< typename T >
ostream& operator<<( ostream& out, const Container< T >& a_container );
template< typename T >
class Container
{
public:
Container( T value );
private:
T value;
friend ostream& operator<< <>( ostream& out, const Container< T >& a_container );
};
template< typename T >
Container< T >::Container( T a_value ): value( a_value )
{
}
template< typename T >
ostream& operator<<( ostream& out, const Container< T >& a_container )
{
out << a_container.value;
return out;
}
int main()
{
Container< int > a_container( 42 );
cout << a_container;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPgpjbGFzcyBDb250YWluZXI7Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+Cm9zdHJlYW0mIG9wZXJhdG9yPDwoIG9zdHJlYW0mIG91dCwgY29uc3QgQ29udGFpbmVyPCBUID4mIGFfY29udGFpbmVyICk7Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+CmNsYXNzIENvbnRhaW5lcgp7CglwdWJsaWM6CglDb250YWluZXIoIFQgdmFsdWUgKTsKCQoJcHJpdmF0ZToKCVQgdmFsdWU7CgkKCWZyaWVuZCBvc3RyZWFtJiBvcGVyYXRvcjw8IDw+KCBvc3RyZWFtJiBvdXQsIGNvbnN0IENvbnRhaW5lcjwgVCA+JiBhX2NvbnRhaW5lciApOwp9OwoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPgpDb250YWluZXI8IFQgPjo6Q29udGFpbmVyKCBUIGFfdmFsdWUgKTogdmFsdWUoIGFfdmFsdWUgKQp7Cn0KCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4Kb3N0cmVhbSYgb3BlcmF0b3I8PCggb3N0cmVhbSYgb3V0LCBjb25zdCBDb250YWluZXI8IFQgPiYgYV9jb250YWluZXIgKQp7CglvdXQgPDwgYV9jb250YWluZXIudmFsdWU7CglyZXR1cm4gb3V0Owp9CgppbnQgbWFpbigpIAp7CglDb250YWluZXI8IGludCA+IGFfY29udGFpbmVyKCA0MiApOwoJCgljb3V0IDw8IGFfY29udGFpbmVyOwoJCglyZXR1cm4gMDsKfQ==