I got this error and this made me thinking.

First example produces an error:
m.C:2: error: invalid application of 'sizeof' to incomplete type 'B'
But the second one doesn't.

Why if I take sizeof() of the current class when instantiating the object it's
an error and if I pass the type to the class A as a template parameter this
isn't an error. And class A can do with it's template parameter all it wants
and this is ok.

I think first example should compile w/out errors since static object doesn't
even change the size of B, so it shouldn't matter what it is.


---- this code produces an error ----
template<int i> struct A { };
struct B { static A<sizeof(B)> a; };

---- this code compiles w/out errors ----
template<typename O> struct A { };
struct B { static A<B> a; };


-- 
           Summary: Static member of the class should be able to depend on
                    classes size
           Product: gcc
           Version: 4.1.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: yuri at tsoft dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33805

Reply via email to