Я нахожусь в процессе преобразования библиотеки, которую я ранее написал для clang и gcc, в MSVC, и я столкнулся с тем, что, как я полагаю, должно быть ошибкой, но я недостаточно разбираюсь в стандарте, чтобы сказать дляsure.
Следующий код выдает ошибки о необъявленных идентификаторах и недопустимых аргументах по умолчанию:
template <class T>
struct dummy_struct {};
template <class T>
using dummy_alias = dummy_struct<T>;
template <template <class> class Thing>
struct foo {
template <template <class> class T = Thing>
void bar() {}
};
int main() {
foo<dummy_alias> fdsa;
fdsa.bar();
}
error C3202: 'Thing': invalid default argument, expected a class template
note: see reference to class template instantiation 'foo<dummy_alias>' being compiled
error C2065: 'Thing': undeclared identifier
Вот ссылка на Compiler Explorer для приведенного выше примера: https://godbolt.org/z/e2SEpD
Корень проблемы, по-видимому, в том, что MSVC неудобно из-за того, что шаблоны псевдонимов используются в качестве параметров шаблона шаблона.
Я предполагаю, что это должно быть ошибкой, но я решил, что я буду запускать ее потенциально болееознакомьтесь со стандартом, прежде чем отправлять отчет.Заранее спасибо!
Для пояснения этот код без проблем компилируется в последних версиях gcc, clang и icc.