This question already has answers here:
Overloaded non-type template is ambiguous while non-templated function is ok

(3个答案)


4年前关闭。




尝试重载函数和函数模板时,我得到不同的行为。对于功能:
void foo(int)
{
    std::cout << "int";
}

void foo(char)
{
    std::cout << "char";
}
foo(42)int。但是对于功能模板:
template <int T>
void bar()
{
    std::cout << "int T";
}

template <char T>
void bar()
{
    std::cout << "char T";
}
bar<42>()是不明确的调用。即使我使用像bar<'a'>()这样的char,也会发生这种情况。为什么一个起作用而不另一个起作用?

最佳答案

标准 N4140 (贷方为 M.M )在中提供了此说明和示例。14.8.2模板参数推导:



但是,请注意,以下草稿中的规则已更改为because:



建议的示例是:

关于c++ - 功能模板重载的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37425307/

10-17 02:02