https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71975
Bug ID: 71975
Summary: In c++11/14 mode whitespaces are ignored between enum
or class type name and ::
Product: gcc
Version: 6.1.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: gw.fossdev at gmail dot com
Target Milestone: ---
Created attachment 38951
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=38951&action=edit
Test case triggering the bug
Hello,
I've got a wired behaviour with c++11 and enums or classes as return type of a
fully specified function residing in the global namespace. I.e. with a line
like
namespace bar {
class foo {
friend some_enum_type ::global_function();
};
}
an error "enum some_enum_type is not a class or namespace" is reported.
Attached is an according test case.
Observations:
* With std=c++03 this compiles fine, probably because in this case enums can
not be strongly typed and make use of "::".
* With c++11 this code compiles not.
* If the return type is a class this construct also fails to compile.
* If the return type is an "int" then it always compiles.
I've first reported this bug in Debian [1] and also against LLVM [2].
Especially, since these two mostly independently developed compilers choke on
this same construct I'm not sure whether this is actually a bug in the
compilers, or whether this is an error or undefined behaviour resulting from
the formulation of the C++ standard.
Many thanks,
Gert
[1] https://bugs.debian.org/829604
[2] https://llvm.org/bugs/show_bug.cgi?id=28422