#include <iostream>
template < class T>
class B
{
public :
B( )
{
std:: cout << "Constructing with default ctor\n " ;
}
B( int )
{
std:: cout << "Initializing with int param\n " ;
}
B( double )
{
std:: cout << "Initializing with double param\n " ;
}
} ;
template < class T>
class A
{
public :
static const B< T> member;
} ;
// for an int
template <>
const B< int > A< int > :: member ( 3 ) ;
// for a double
template <>
const B< double > A< double > :: member ( 50.3 ) ;
// use no-arg constructur with A<void>
template <>
const B< void > A< void > :: member ; // = B<void>();
int main( int argc, char * argv[ ] )
{
// (printing so I don't get a warning, which will be treated as an error)
std:: cout << & A< int > :: member ;
std:: cout << & A< double > :: member ;
std:: cout << & A< void > :: member ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIEIKewpwdWJsaWM6CiAgICAKICAgIEIoKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiQ29uc3RydWN0aW5nIHdpdGggZGVmYXVsdCBjdG9yXG4iOwogICAgfQogICAgCiAgICBCKGludCkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIkluaXRpYWxpemluZyB3aXRoIGludCBwYXJhbVxuIjsKICAgIH0KICAgIAogICAgQihkb3VibGUpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJJbml0aWFsaXppbmcgd2l0aCBkb3VibGUgcGFyYW1cbiI7CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgQQp7CnB1YmxpYzoKCQogICAgc3RhdGljIGNvbnN0IEI8VD4gbWVtYmVyOwp9OwoKLy8gZm9yIGFuIGludAp0ZW1wbGF0ZTw+CmNvbnN0IEI8aW50PiBBPGludD46Om1lbWJlcigzKTsKCi8vIGZvciBhIGRvdWJsZQp0ZW1wbGF0ZTw+CmNvbnN0IEI8ZG91YmxlPiBBPGRvdWJsZT46Om1lbWJlcig1MC4zKTsKCi8vIHVzZSBuby1hcmcgY29uc3RydWN0dXIgd2l0aCBBPHZvaWQ+CnRlbXBsYXRlPD4KY29uc3QgQjx2b2lkPiBBPHZvaWQ+OjptZW1iZXI7IC8vID0gQjx2b2lkPigpOwoKCmludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCnsKICAgIC8vIChwcmludGluZyBzbyBJIGRvbid0IGdldCBhIHdhcm5pbmcsIHdoaWNoIHdpbGwgYmUgdHJlYXRlZCBhcyBhbiBlcnJvcikKICAgIHN0ZDo6Y291dCA8PCAmQTxpbnQ+OjptZW1iZXI7CiAgICBzdGQ6OmNvdXQgPDwgJkE8ZG91YmxlPjo6bWVtYmVyOwogICAgc3RkOjpjb3V0IDw8ICZBPHZvaWQ+OjptZW1iZXI7CiAgICAKICAgIHJldHVybiAwOwp9