请解释模板专业化选择的规则。我有一个例子:
template<typename T1, typename T2 = int>
struct S : false_type{};
template<typename T>
struct S<T, float> : true_type{};
cout << boolalpha << S<float>::value;
为什么输出为false
?一般而言,专业类中的默认模板参数typename T2 = int
会发生什么?它会引入一些影响吗?
答案 0 :(得分:8)
选择模板专业化分为五个步骤:
<T1, T2 = int> S
)T1 <- float
)T2 <- int
)<float, int>
与<T, float>
不匹配,因此请忽略专业化;只剩下可能性为主要模板)