On 2/24/06, Perry Smith <[EMAIL PROTECTED]> wrote: > I have asked this question before -- maybe to the gcc-help list but > I'm still unclear. > > The problem is this: > > struct foo { > int a; > int b; > int c; > }; > > static const int foo::*j = &foo::c; // accepted > > class dog { > static const int foo::*k = &foo::c; // error > }; > > 5.19 (constant expressions) paragraph 2, the last item in the 1998 C+ > + spec says " -- a pointer to member constant expression." That > appears to be defined as: '&' qualified-id (5.19 paragraph 6). > > So is the line in error legal C++ or not?
No. t.C:10: error: 'foo::c' cannot appear in a constant-expression t.C:10: error: `&' cannot appear in a constant-expression t.C:10: error: invalid in-class initialization of static data member of non-integral type 'const int foo::*' use class dog { static const int foo::*k; }; const int foo::*dog::k = &foo::c; Richard. > Thanks, > Perry > >