Rozważmy następujący kod:Compiler rozbieżność: Interakcje pomiędzy rozdzielczości alias i nazwa odnośnika
using type = long;
namespace n {
using type = long;
}
using namespace n;
int main() {
type t;
}
To kompiluje czysto na Clang 3.7 i GCC 5.3, ale MSVC 19 * daje się następujący komunikat o błędzie:
main.cpp(9): error C2872: 'type': ambiguous symbol
main.cpp(1): note: could be 'long type'
main.cpp(4): note: or 'n::type'
Czy ta kod dobrze sformułowany? Jaka część standardu odnotowuje, czy alias jest rozwiązywany przed sprawdzaniem niejednoznaczności?
Należy pamiętać, że Clang i GCC zarówno dają podobne błędy do MSVC, jeśli zmienisz jeden z tych aliasów.
Jestem w pełni świadomy tego, jak kwalifikowanie nazwy rozwiązałoby niejednoznaczność, interesuje mnie tylko to, co standard ma do powiedzenia na ten temat.
* - Wystarczy wkleić kod i uruchomić go w ten link, nie wiem, czy jest online kompilator MSVC z permalinks
Czy mówisz poważnie? – Columbo
@ Columbo, wysłałem swoją odpowiedź, zanim zobaczyłem twoją. Sam go usunąłabym, ale zostawię to teraz - nieważne, że to było złe dla tego, kto to zrobił. – SergeyA