template < typename T>
class C;
template < typename T>
class CBase
{
private :
int foo;
friend class C< T> ;
} ;
template < typename T>
class C : public CBase< T>
{
using CBase< T> :: foo ;
public :
void access( ) { foo = 1 ; } // есть везде, кроме T = int
} ;
template <>
class C< int > : public CBase< int >
{
using CBase< int > :: foo ;
public :
void funct( ) { foo = 42 ; } // есть только для T = int
} ;
int main( )
{
C< void > cv;
cv.funct ( ) ;
C< int > ci;
ci.access ( ) ;
return 0 ;
}
dGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3MgQzsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CmNsYXNzIENCYXNlCnsKcHJpdmF0ZToKICAgIGludCBmb287CiAgICBmcmllbmQgY2xhc3MgQzxUPjsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpjbGFzcyBDIDogcHVibGljIENCYXNlPFQ+CnsKICAgIHVzaW5nIENCYXNlPFQ+Ojpmb287CnB1YmxpYzoKICAgIHZvaWQgYWNjZXNzKCkgeyBmb28gPSAxOyB9IC8vINC10YHRgtGMINCy0LXQt9C00LUsINC60YDQvtC80LUgVCA9IGludAp9OwoKdGVtcGxhdGUgPD4KY2xhc3MgQzxpbnQ+IDogcHVibGljIENCYXNlPGludD4KewogICAgdXNpbmcgQ0Jhc2U8aW50Pjo6Zm9vOwpwdWJsaWM6CiAgICB2b2lkIGZ1bmN0KCkgeyBmb28gPSA0MjsgfSAvLyDQtdGB0YLRjCDRgtC+0LvRjNC60L4g0LTQu9GPIFQgPSBpbnQKfTsKCmludCBtYWluKCkKewogICAgQzx2b2lkPiBjdjsKICAgIGN2LmZ1bmN0KCk7CiAgICBDPGludD4gY2k7CiAgICBjaS5hY2Nlc3MoKTsKICAgIHJldHVybiAwOwp9