c++/3800: A value of const static class attribute cannot be used in STL
Alexandre Oliva
aoliva@redhat.com
Fri Jul 27 02:39:00 GMT 2001
On Jul 27, 2001, Milan Krčmář <milan.krcmar@debis.cz> wrote:
> If I define any constant static member array|struct with value inside
> class body, the compiler emits an error. The error is not emited for
> constant static int and unsigned (and probably all the simple types as
> char, ...). If, according to the standard, it is not allowed to define (=
> together with its value) simple const static members inside class body,
> the compiler should emit an error, too.
You are allowed to declare with an initializer a static data member of
constant integral type inside the class body, but this doesn't mean
you don't have to define the static data member outside the class
body. In C++, for every:
class foo {
static ..... bar;
};
there must be a:
.... foo::bar;
outside the class body, regardless of the type or constness of
foo::bar. If foo::bar is of constant integral type, and the
initializer is given inside the class body, foo::bar may be used in
constant expressions, and the definition must not contain an
initializer, but the definition must still be present. If you don't
believe this, see [class.static.data]/4.
--
Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer aoliva@{cygnus.com, redhat.com}
CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist *Please* write to mailing lists, not to me
More information about the Gcc-bugs
mailing list