Par C++ 03 standard 7.3.3/4. Le code ci-dessous est bien formé puisque la fonction g a une liaison C. A :: g() et B :: g() devraient faire référence à la même entité. Lorsque je compile le code C++ avec Xcode 4.1, il existe différents comportements lors de la sélection de différents compilateurs. Si Apple LLVM 2.1 est sélectionné, il y a une erreur de compilation, dites "Call to 'g' est ambigu". Si vous sélectionnez GCC 4.2 ou LLVM GCC 4.2, il peut être compilé avec succès.Xcode 4.1: Apple LLVM 2.1 se comporte différemment de LLVM GCC 4.2 et GCC 4.2
Est-ce un défaut de CLang ou je me trompe quelque part?
Le Apple LLVM 2.1 est en fait que Clang est le frontal et LLVM est le back-end, non?
============================================== ============================
La description correspondante de la norme C est:
Si la recherche de nom trouve une déclaration pour un nom dans deux espaces de noms différents, et les déclarations ne déclarent pas la même entité et ne déclarent pas de fonctions, l'utilisation du nom est mal formée. [Note: en particulier, le nom d'un objet, d'une fonction ou d'un énumérateur ne cache pas le nom d'une classe ou d'une énumération déclarée dans un espace de noms différent. Par exemple,
namespace A {
class X { };
extern "C" int g();
extern "C++" int h();
}
namespace B {
void X(int);
extern "C" int g();
extern "C++" int h();
}
using namespace A;
using namespace B;
void f() {
X(1); // error: name X found in two namespaces
g(); // okay: name g refers to the same entity
h(); // error: name h found in two namespaces
}
-end ndlr]