template<typename std::list<int>::value_type value>
int silly()
{
return value;
}
template<typename int value>
int silly2()
{
return value;
}
template<int value>
int silly3()
{
return value;
}
Вопрос1> Является ли value_type
от std::list<int>
int
?Являются ли эти параметры шаблона значений одинаковыми?
Question2> Действительно ли эти три функции sillyX
эквивалентны друг другу?
@ AJG85- Хотя я согласен, что второй из них недействителен, первый и третий являются совершенно законными - они не являются аргументами шаблона шаблона. – templatetypedef
@templatetypedef: Ну, похоже, MSVC принимает все три ... MSVC принимает много, хотя. Третий - это хорошо, первый и второй - это то, что не должно компилироваться для меня. Думаю, я был неправ. – AJG85
@ AJG85: Первое допустимо, так как 'typename' может быть помещено перед любым именем с помощью * inested-name-specifier * (то есть' Class :: name' или 'Namespace :: name'). Он не может быть помещен перед неквалифицированным именем типа, поэтому второй недействителен без одного из многих «расширений» от Microsoft. –