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