subclass - Nested subclasses in C++ -
i'm trying make nested class subclass of parent:
struct x { struct y : public x {}; };
unfortunately, doesn't seem allowed in c++, g++ produces error
error: invalid use of incomplete type 'struct x'
however, actual code has x
templated class:
template<typename t> struct x { struct y : public x {}; };
i same message, time it's warning:
warning: invalid use of incomplete type 'struct x< t >'
my question is: why former case illegal, while templated case gives warning? templated version works expect (i can create instances of x<t>::y
, cast them x<t>
, , on), warning mean shouldn't use it? problems can expect run if ignore warning?
technically, far compiler concerned, layout of base (x
) not need known until template (x
) instanciated. , template (x
) may not istantiated before defined. @ point, it's layout known.
simplest way error template try istantiate y
inside x
:
template<typename t> struct x { struct y : public x {}; y y; };
in earlier versions of complier, there no warning in case show, added @ point. here discussion gcc bugtracker whether warning spurious. there uncertainty whether allowed standard conclusion not allowed.
so, neither case allowed standard, gcc keeps working latter, because can.
yam marcovic shows how x::y
can defined in standard compliant way. analoguously identical example shown in gcc bugtracker.
Comments
Post a Comment