Si consideri il seguente programma:comportamenti differenti tra Clang e GCC quando si esegue la ricerca del nome qualificato
#include <iostream>
namespace N {
int j = 1;
}
namespace M {
typedef int N;
void f() {
std::cout << N::j << std::endl;
}
}
int main() { M::f(); }
compilazione con clangore ha pronunciato la seguente errore del compilatore:
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 non dà alcun errore di compilazione . Sto cercando di capire per quale compilatore dovrei presentare la segnalazione di errore. Quale compilatore ha il comportamento corretto e perché (riferimenti allo standard C++)?
Wandbox - Clang: http://melpon.org/wandbox/permlink/s0hKOxCFPgq5aSmJ
Wandbox - GCC: http://melpon.org/wandbox/permlink/i2kOl3qTBVUcJVbZ
Ma non è un programma "Ill Formed" un po 'come "comportamento indefinito", che è perfettamente valido per il compilatore a) non dare un errore eb) produrre codice che funziona in qualche modo [anche correttamente o rendendo i demoni volare fuori il naso] (Non dire che un grande non dovrebbe essere sollevato, solo che non è, tecnicamente, sbagliato avere il compilatore NON produce un errore] –
Grazie! Bug segnalato: https://gcc.gnu.org/bugzilla /show_bug.cgi?id=66900 – Supremum
@MatsPetersson Lo standard implica una diagnostica richiesta quando dice "mal formato". In genere si dice "il programma è mal formato, non è necessaria alcuna diagnostica" quando non è richiesta una diagnostica e "il comportamento è indefinito" in casi non definiti – 0x499602D2