uninitialized const

c++, constants, default-constructor, g++, visual-c++

Solution

The C++03 Standard:

8.5 [dcl.init] paragraph 9

If no initializer is specified for an object, and the object is of (possibly cv-qualified) non-POD class type (or array thereof), the object shall be default-initialized; if the object is of const-qualified type, the underlying class type shall have a user-declared default constructor.

From the above the error in gcc seems to be perfectly valid.

Problem

This compiles perfectly fine with the current MSVC compiler: ``` struct Foo { } const foo; ``` However, it fails to compile with the current g++ compiler: ``` error: uninitialized const 'foo' [-fpermissive] note: 'const struct Foo' has no user-provided default constructor ``` If I provide a default constructor myself, it works: ``` struct Foo { Foo() {} } const foo; ``` Is this another case of MSVC being too permissive, or is g++ too strict here?

Original source

Related problems