Минимальный код, который я был в состоянии произвести, чтобы воспроизвести проблему:Является ли законным расширение пакета параметров не-типа для определения внутреннего шаблона класса с параметрами шаблона без типа?
template <int>
struct Tag { };
Tag<0> w;
template <int... Is>
struct Outer {
template <Tag<Is> &...>
struct Inner {
};
};
int main() {
Outer<0>::Inner<w> f;
}
г ++ (версия 6.1.1 20160511) наталкивается следующее сообщение об ошибке при компиляции кода:
pp.cc: In function ‘int main()’: pp.cc:14:21: internal compiler error: unexpected expression ‘Is’ of kind template_parm_index Outer<0>::Inner<w> f;
И производит длинную и скучную трассировку стека. clang ++ в версии 3.6.0, похоже, не имеет проблем с компиляцией кода. Тот же самый код с параметрами шаблона типа компилируется нормально в обоих компиляторов:
template <class>
struct Tag { };
Tag<int> w;
template <class... Ts>
struct Outer {
template <Tag<Ts> &...>
struct Inner {
};
};
int main() {
Outer<int>::Inner<w> f;
}
Так это г ++ ошибка или я упускаю что-то важное о не-типа VARIADIC расширения параметров шаблона, который не относится к расширению параметров шаблона класса ?
«внутренняя ошибка компилятора» явно означает ошибку в НКУ, независимо от этого действует C++ или нет , – kennytm
Спасибо! Я не знал, что ... –
Что такое синтаксис 'template & ...> struct Inner {};' mean? –
Zereges