template < typename T, typename S>
class Enclosing{
public :
class Nested;
Nested foo( ) ;
} ;
template < typename T, typename S>
class Enclosing< T,S> :: Nested {
public :
T field;
void some_method( ) ;
friend class Enclosing; // instead of this line I also tried:
// friend class Enclosing<T,S>
// and it didn't work either
} ;
template < typename T, typename S>
typename Enclosing< T,S> :: Nested Enclosing< T,S> :: foo ( ) {
Nested nes;
nes.some_method ( ) ; // the problem appears here
return nes;
}
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUz4KY2xhc3MgRW5jbG9zaW5newpwdWJsaWM6CiAgICBjbGFzcyBOZXN0ZWQ7CiAgICBOZXN0ZWQgZm9vKCk7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBTPgpjbGFzcyBFbmNsb3Npbmc8VCxTPjo6TmVzdGVkewpwdWJsaWM6CiAgICBUIGZpZWxkOwogICAgdm9pZCBzb21lX21ldGhvZCgpOwogICAgZnJpZW5kIGNsYXNzIEVuY2xvc2luZzsgICAgLy8gaW5zdGVhZCBvZiB0aGlzIGxpbmUgSSBhbHNvIHRyaWVkOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZnJpZW5kIGNsYXNzIEVuY2xvc2luZzxULFM+IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGl0IGRpZG4ndCB3b3JrIGVpdGhlcgp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUz4KdHlwZW5hbWUgRW5jbG9zaW5nPFQsUz46Ok5lc3RlZCBFbmNsb3Npbmc8VCxTPjo6Zm9vICgpewogICAgTmVzdGVkIG5lczsKICAgIG5lcy5zb21lX21ldGhvZCgpOyAgICAgICAgIC8vIHRoZSBwcm9ibGVtIGFwcGVhcnMgaGVyZQogICAgcmV0dXJuIG5lczsKfQ==