x1.*x2
#include <iostream>
using namespace std;
template <typename ReturnType, typename ArgumentType>
ReturnType Foo(ArgumentType arg){}
template <typename ArgumentType>
string Foo(ArgumentType arg) { cout<<"inside return 1"<<endl; return "Return1"; }
int main(int argc, char *argv[])
{
Foo<int>(2);
return 0;
}
因为,函数重载只考虑函数名,参数类型列表和封闭命名空间。为什么会抛出这个错误?
答案 0 :(得分:2)
对Foo<int>(2)
的调用可以是:
ReturnType Foo(ArgumentType arg); //with ReturnType = int, ArgumentType deduced as int
或
string Foo(ArgumentType arg); //with ArgumentType = int
编译器不能告诉你想要哪一个,因为它们都有相同的参数:
int Foo(int);
string Foo(int);