#include <memory>
#include <iostream>
using namespace std;
template < class T>
class B
{
public :
void outB( ) { cout << "dim from B is " << dim_ << endl ; }
B( int dim) : dim_( dim) { }
~B( ) { }
protected :
int dim_;
} ;
template < class T>
class A : B< T>
{
public :
using B< T> :: dim_ ;
// using B<T>::outB;
void outA( ) { cout << "dim from A is " << dim_ << endl ; }
A( int dim) : B< T> ( dim) { }
~A( ) { }
private :
} ;
int main( int argc, const char * argv[ ] )
{
shared_ptr< A< double > > ap( new A< double > ( 2 ) ) ;
ap- > outA( ) ;
ap- > outB( ) ;
return 0 ;
}
I2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBCIAp7CnB1YmxpYzoKICB2b2lkIG91dEIoKSB7IGNvdXQgPDwgImRpbSBmcm9tIEIgaXMgIiA8PCBkaW1fIDw8IGVuZGwgOyB9CiAgQihpbnQgZGltKSA6IGRpbV8oZGltKSB7fQogIH5CKCkge30KcHJvdGVjdGVkOgogIGludCBkaW1fOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIEEgOiBCPFQ+CnsKcHVibGljOgogIHVzaW5nIEI8VD46OmRpbV87Ci8vICB1c2luZyBCPFQ+OjpvdXRCOwogIHZvaWQgb3V0QSgpIHsgY291dCA8PCAiZGltIGZyb20gQSBpcyAiIDw8IGRpbV8gPDwgZW5kbCA7IH0KICBBKGludCBkaW0pIDogQjxUPihkaW0pIHt9CiAgfkEoKSB7fQpwcml2YXRlOgp9OwoKCmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCnsKICBzaGFyZWRfcHRyPEE8ZG91YmxlPiA+IGFwKG5ldyBBPGRvdWJsZT4oMikpOwogIGFwLT5vdXRBKCk7CiAgYXAtPm91dEIoKTsKICByZXR1cm4gMDsKfQ==
compilation info
prog.cpp: In function 'int main(int, const char**)':
prog.cpp:10:8: error: 'void B<T>::outB() [with T = double]' is inaccessible
prog.cpp:34:12: error: within this context
prog.cpp:34:12: error: 'B<double>' is not an accessible base of 'A<double>'
stdout