【发布时间】:2010-01-08 17:14:57
【问题描述】:
我在声明一个使用 boost::enable_if 的函数时遇到了一些麻烦:以下代码给了我一个编译器错误:
// Declaration
template <typename T>
void foo(T t);
// Definition
template <typename T>
typename boost::enable_if<boost::is_same<T, int> >::type foo(T t)
{
}
int main()
{
foo(12);
return 0;
}
编译时,我收到“对 foo 的模糊调用”错误。根据enable_if的定义,当条件为真时,'type' typedef对应void,所以据我所知,foo的两个签名匹配。为什么编译器会认为它们不同,有没有正确的方式转发声明foo(最好不要重复enable_if部分)?
【问题讨论】:
-
匹配是问题,编译器无法决定要使用哪个模板。
标签: c++ forward-declaration ambiguity enable-if