[cfe-commits] r58916 - in /cfe/trunk: include/clang/AST/DeclBase.h include/clang/AST/DeclCXX.h include/clang/Basic/DiagnosticKinds.def lib/Sema/Sema.cpp lib/Sema/Sema.h lib/Sema/SemaCXXScopeSpec.cpp lib/Sema/SemaDecl.cpp lib/Sema/SemaDeclCXX.cpp lib/Sema/SemaExpr.cpp test/SemaCXX/nested-name-spec.cpp
argiris kirtzidis
akyrtzi at gmail.com
Wed Nov 19 11:59:45 PST 2008
Douglas Gregor wrote:
>
> That isn't the way I read C++03 3.4.3p1. The second sentence says:
>
> "During the lookup for a name preceding the::scope resolution
> operator, object, function, and enumerator names are ignored."
>
> An enumeration name is not an operator, object, function, or
> enumerator name, so we shouldn't be ignoring them.
I think you are right but let's be absolutely certain about this; you
brought up GCC as the compiler that gets it right, but GCC also ignores
enumerations:
namespace A {
int x;
}
void f() {
enum A {};
A::x = 0;
}
GCC compiles it without errors.
>
>>
>>> In C++0x, we *can* do qualified name lookup into an enumeration, so
>>> the example fails because we can't bind an 'int' to a reference to a
>>> 'float'.
>>
>> I was under the impression that this happens to 'enum class' which is
>> different from 'enum'. You can do qualified name lookup even with
>> simple enums (not 'enum class') ?
>
> Yes. The C++0x 3.4.3p1 says:
>
> "The name of a class, concept map (but not a concept), or
> namespace member or enumerator can be referred
> to after the :: scope resolution operator (5.1) applied to a
> nested-name-speciļ¬er that nominates its class,
> concept map, namespace, or enumeration."
>
> Note that it says "enumeration" not "scoped enumeration". See also
> C++03 7.2p11, which gives an example of a qualified-id that refers to
> an enumerator of an unscoped enumeration type.
Nice! That's good to know.
-Argiris
More information about the cfe-commits
mailing list