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>是std::list<int>
int
的value_type
?這些值模板參數是否相同?
Question2>這三個sillyX
功能實際上是否相同?
@ AJG85-雖然我同意其中的第二個是無效的,但第一個和第三個是完全合法的 - 它們是非類型的模板參數。 – templatetypedef 2012-02-13 17:42:52
@templatetypedef:那麼看起來MSVC接受所有三個......雖然MSVC接受很多。第三是好的,第一和第二是看起來不應該編譯給我的東西。猜猜我錯了。 – AJG85 2012-02-13 17:53:01
@ AJG85:第一個是有效的,因爲'typename'可以放在帶有* nested-name-specifier *(即'Class :: name'或'Namespace :: name')的任何名字前面。它不能放在一個不合格的類型名稱前面,所以如果沒有微軟的許多「擴展」之一,它是無效的。 – 2012-02-13 18:23:24