Considérez le programme suivant:comportement différent entre Clang et GCC lors de l'exécution nom qualifié recherche
#include <iostream>
namespace N {
int j = 1;
}
namespace M {
typedef int N;
void f() {
std::cout << N::j << std::endl;
}
}
int main() { M::f(); }
Compiler avec clang donne l'erreur de compilation suivante:
prog.cc:10:22: error: 'N' (aka 'int') is not a class, namespace, or
enumeration
std::cout << N::j << std::endl;
^1 error generated.
GCC ne donne aucune erreur de compilation . J'essaye de comprendre pour quel compilateur je devrais classer le rapport de bogue pour. Quel compilateur a le bon comportement et pourquoi (références à la norme C++)?
Wandbox - Clang: http://melpon.org/wandbox/permlink/s0hKOxCFPgq5aSmJ
Wandbox - GCC: http://melpon.org/wandbox/permlink/i2kOl3qTBVUcJVbZ
Mais "Ill Formed" ne ressemble pas à un "comportement indéfini", il est parfaitement normal pour le compilateur de: a) ne pas donner d'erreur et b) produire un code qui fonctionne d'une manière ou d'une autre volez votre nez] (Ne pas dire un gros ne devrait pas être soulevé, juste que ce n'est pas, techniquement, faux d'avoir le compilateur PAS produire une erreur] –
Merci! Bug signalé: https://gcc.gnu.org/bugzilla /show_bug.cgi?id=66900 – Supremum
@MatsPetersson La norme implique un diagnostic obligatoire quand elle est dite "mal formée" Elle indique typiquement "le programme est mal formé, aucun diagnostic requis" quand un diagnostic n'est pas requis, et "le comportement n'est pas défini" dans des cas non définis – 0x499602D2