c++ - Access restrictions for template arguments -
the section n4296::14.3/3 [temp.arg] says:
the name of template-argument shall accessible @ point where it used template-argument. [ note: if name of template-argument accessible @ point used templateargument, there no further access restriction in the resulting instantiation corresponding template-parameter name used. —end note ]
all right, let's consider following example:
template <class t> class x{ static typename t::s ts; }; class y { private: class vs{ class s{ }; }; x<vs> x; //1 }; template argument template x in instantiation @ //1 class vs. now, standard said it's this:
the name of template-argument shall accessible @ point where it used template-argument.
class vs accessible @ point //1, therefore requirement held. inspite of fact standard said there's no further access restriction, code not compiled.
why code not compiled? based on section provided, should be compiled.
s private, try this:
template <class t> class x{ static typename t::s ts; }; class y { private: class vs{ public: class s{ }; }; x<vs> x; //1 };
Comments
Post a Comment