#include <iostream>
using namespace std;
template <typename A, typename B> void test(A a, B b) { cout << "first" << endl;}
template <typename A> void test(A a, int b) { cout << "second" << endl;}
template <> void test(int a, int b) { cout << "special" << endl;} //this is a specific instantiation, of which template?
int main(){
test(2,3); //got: "special"
test<int>(2,3); //got: "special"
test<int, int>(2,3); //got: "first". So specialisation is linked to second template, why?
}
选择哪个模板显式特化是实例化的规则是什么?看起来它可能含糊不清。从最后一个函数调用的输出中可以看出,特殊化是针对第二个函数模板定义的(显式模板参数选择第一个模板,但不使用特化 - 所以它必须是第二个模板的特化) ),为什么呢?似乎任何相关信息应该在N3337的[14.7.3]中,但是尽我所能,我找不到我想要的东西。这样做程序可能会出错吗?
当然可能很少有人会担心这一点,但我仍然很好奇它为什么会发生。