N3936 (7.2.2 절) "범위가 지정된 열거 형의 선언에서 선택적 식별자를 생략해서는 안됩니다."따라서 (모두 포함 된 주석이 내 해석을 설명하려고 시도하는) 코드를 시도했습니다. GNU-g ++ 그 소리가 코드를 거부하고 "열거는 이름이 필요합니다 범위"고 말하는 열거 선언에서 메시지에서 오류가 발생 3.4.2은폐 및 익명 열거 형 선언이 표준 요구 사항과 어떻게 일치합니까?
# include <iostream>
enum any : int; // unscoped opaque declaration :int required by the standard
enum : int {a} t; // unscoped anonymous declaration of t (:int not required)
enum any : int {b} u; // redlecaration of type "any" with one enumerator
enum class foo : char; // scoped opaque declaration "foo" required, :char NOT
enum class foo : char {a, b} Foo; // redeclaration of "foo" with 2
// enumerators. now :char REQUIRED
enum class : char {d} Enum; // scoped anonymous declaration of Enum
// wouldn't be disallowed?
int main()
{
t = a; // assignment to "t"
u = b; // assignment to "u"
Foo = foo::a; // assignment to "Foo"
Enum = decltype(Enum)::d; // allowed (??)
std::cout << static_cast<int>(t) << ' '
<< static_cast<int>(u) << ' '
<< static_cast<int>(Foo) << ' '
<< static_cast<int>(Enum) << std::endl;
}
4.8.3 및 그 소리; 그러나 GNU-g ++은 을 받아들이고 표준 출력에 4 개의 0을 넣는 것을 실행합니다 (코드가 실행되면 예상대로). 열거의 이름 "D"는 것처럼 그 경우, "A"로 변경하면 문제를 더 오류를 연타
은 참고 잘못 열거가 이름으로 범위가 지정되지 않은 열거 될 것와 "A"충돌 선언 "any"유형의 동일한 이름 (적어도 이것은 내가 진단을 읽는 것으로 해석 한 것입니다). 대신 GNU-g ++은 Enum의 열거 자에 대해 "a"라는 이름을 (일관되게) 으로 받아들입니다.
그래서 진실은 무엇입니까?
감사합니다. 그 버그를 찾지 못했습니다. – GSi