https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63769
Bug ID: 63769 Summary: accepts-invalid multiple function definitions in extern "C" Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: nlewycky at google dot com "At most one function with a particular name can have C language linkage. Two declarations for a function with C language linkage with the same function name (ignoring the namespace names that qualify it) that appear in two different namespace scopes refer to the same function." - (N4141) C++14 [dcl.link] paragraph 6. Testcase: extern "C" { namespace ns1 { void foo() {} } namespace ns2 { void foo() {} } } GCC compiles this and emits assembly, if assembled the assembler will complain about symbol 'foo' already being defined. Clang complains about the redeclaration: x.cc:6:10: error: redefinition of 'foo' void foo() {} ^ x.cc:3:10: note: previous definition is here void foo() {} ^ 1 error generated. This should apply all the way back to C++98, this isn't a C++14 change.