#include <stdio.h>
template< typename T >
class A
{
public:
void Func( void );
template< typename U >
void FuncT( const U& value );
template< typename V >
class AA
{
public:
void Func( void );
template< typename W >
void FuncT( const W& value );
};
};
template< typename T >
void A<T>::Func( void ){ printf( "Func\n" ); }
template< typename T >
template< typename U >
void A<T>::FuncT( const U& value ){ printf( "FuncT : U is %d byte\n", sizeof(U) ); }
template< typename T >
template< typename V >
void A<T>::AA<V>::Func( void ){ printf( "Func\n" ); }
template< typename T >
template< typename V >
template< typename W >
void A<T>::AA<V>::FuncT( const W& value ){ printf( "FuncT : W is %d byte\n", sizeof(W) ); }
int main( void )
{
A<int> a;
a.Func();
a.FuncT( true );
A<int>::AA<int> aa;
aa.Func();
aa.FuncT( true );
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+CmNsYXNzIEEKewpwdWJsaWM6CiAgICB2b2lkIEZ1bmMoIHZvaWQgKTsKICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBVID4KICAgIHZvaWQgRnVuY1QoIGNvbnN0IFUmIHZhbHVlICk7CiAgICAKICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBWID4KICAgIGNsYXNzIEFBCiAgICB7CiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBGdW5jKCB2b2lkICk7CiAgICAgICAgdGVtcGxhdGU8IHR5cGVuYW1lIFcgPgogICAgICAgIHZvaWQgRnVuY1QoIGNvbnN0IFcmIHZhbHVlICk7ICAgIAogICAgfTsKfTsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4Kdm9pZCBBPFQ+OjpGdW5jKCB2b2lkICl7IHByaW50ZiggIkZ1bmNcbiIgKTsgfQoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVSA+CnZvaWQgQTxUPjo6RnVuY1QoIGNvbnN0IFUmIHZhbHVlICl7IHByaW50ZiggIkZ1bmNUIDogVSBpcyAlZCBieXRlXG4iLCBzaXplb2YoVSkgKTsgfQoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPgp0ZW1wbGF0ZTwgdHlwZW5hbWUgViA+CnZvaWQgQTxUPjo6QUE8Vj46OkZ1bmMoIHZvaWQgKXsgcHJpbnRmKCAiRnVuY1xuIiApOyB9Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+CnRlbXBsYXRlPCB0eXBlbmFtZSBWID4KdGVtcGxhdGU8IHR5cGVuYW1lIFcgPgp2b2lkIEE8VD46OkFBPFY+OjpGdW5jVCggY29uc3QgVyYgdmFsdWUgKXsgcHJpbnRmKCAiRnVuY1QgOiBXIGlzICVkIGJ5dGVcbiIsIHNpemVvZihXKSApOyB9CgppbnQgbWFpbiggdm9pZCApCnsKICAgIEE8aW50PiBhOwogICAgYS5GdW5jKCk7CiAgICBhLkZ1bmNUKCB0cnVlICk7CiAgICAKICAgIEE8aW50Pjo6QUE8aW50PiBhYTsKICAgIGFhLkZ1bmMoKTsKICAgIGFhLkZ1bmNUKCB0cnVlICk7CiAgICAKICAgIHJldHVybiAwOwp9