Рассмотрим этот код:
using type = long;
namespace n {
using type = long;
}
using namespace n;
int main() {
type t;
}
Это правильно компилируется на Clang 3.7 и GCC 5.3, но MSVC 19* выдает следующее сообщение об ошибке:
main.cpp(9): error C2872: 'type': ambiguous symbol
main.cpp(1): note: could be 'long type'
main.cpp(4): note: or 'n::type'
Является ли этот код правильно сформированным? В какой части стандарта указывается, разрешается ли псевдоним перед проверкой неоднозначности?
Обратите внимание, что Clang и GCC выдают аналогичные ошибки MSVC, если вы измените один из этих псевдонимов.
Я полностью осознаю, как уточнение имени разрешит двусмысленность, мне просто интересно, что стандарт говорит об этом.
*- Просто вставьте код и запустите его по этой ссылке, я не знаю, есть ли онлайн-компилятор MSVC с постоянными ссылками.