Considerate questo codice:Compiler discrepanza: Interazione tra la risoluzione alias e nome di ricerca
using type = long;
namespace n {
using type = long;
}
using namespace n;
int main() {
type t;
}
Questo compila in modo pulito sulla Clang 3.7 e GCC 5.3, ma MSVC 19 * ha pronunciato la seguente messaggio di errore:
main.cpp(9): error C2872: 'type': ambiguous symbol
main.cpp(1): note: could be 'long type'
main.cpp(4): note: or 'n::type'
È questo codice ben formato? Quale parte delle note standard indica se l'alias viene risolto prima dei controlli di ambiguità?
Nota che Clang e GCC danno entrambi errori simili a MSVC se si modifica uno di questi alias.
Sono pienamente consapevole di quanto la definizione del nome possa risolvere l'ambiguità, sono solo interessato a ciò che lo standard ha da dire al riguardo.
* - Basta incollare il codice ed eseguirlo a quel link, non so se c'è un compilatore in linea MSVC con permalinks
Sei serio? – Columbo
@Columbo, ho postato la mia risposta prima di aver visto la tua. Vorrei rimuoverlo da solo, ma lo lascerò ora - facendo downvoting è stato sbagliato su chiunque lo abbia fatto. – SergeyA