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
>
>

Reply via email to