http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54216
Bug #: 54216
Summary: Missing diagnostic for ill-formed anonymous enum
declarations
Classification: Unclassified
Product: gcc
Version: 4.7.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: [email protected]
ReportedBy: [email protected]
G++(-pedantic-errors) wrongly accepts following non-conforming enumeration
declarations(in namespace scope or block scope) and no diagnostic output at
all:
enum {}; //-std=c++98 or -std=c++11
enum class {}; //-std=c++11
enum class { x }; //-std=c++11
According the standard, all of them are ill-formed:
(for the first declaration)
ISO C++98/03/11
7/3 ...
[Example:
enum { }; // ill-formed
typedef class { }; // ill-formed
—end example]
(for others)
ISO C++11
7.2/2 ... The optional identifier shall not be omitted in the declaration of a
scoped enumeration. ...
While clang++(trunk, also using -pedantic-errors) rejects them correctly:
(for the first declaration, -std=c++98 or -std=c++11)
error: declaration does not declare anything
[-Werror,-Wmissing-declarations]
enum {};
^~~~
(for others, -std=c++11)
error: scoped enumeration requires a name
enum class { };
^
error: declaration does not declare anything
[-Werror,-Wmissing-declarations]
enum class { };
^~~~
error: scoped enumeration requires a name
enum class { x };
^