相关疑难解决方法(0)

使用`std :: enable_if`和非推导的上下文重载函数模板消歧

请考虑以下代码:

template <typename T>
struct dependent_type
{
    using type = T;
};

template <typename T>
auto foo(T) -> std::enable_if_t<std::is_same<T, int>{}>
{
    std::cout << "a\n"; 
}

template<typename T> 
void foo(typename dependent_type<T>::type) 
{
    std::cout << "b\n";
}
Run Code Online (Sandbox Code Playgroud)
  • 第一个重载foo可以T从其调用中推断出来.

  • 的第二过载foo是一个非推测的上下文.

int main()
{    
    foo<int>( 1 );      // prints "b"
    foo<double>( 1.0 ); // prints "b"
    foo( 1 );           // prints "a"
}
Run Code Online (Sandbox Code Playgroud)

为什么foo<int>( 1 )打印"b"而不是"a"?

wandbox示例

c++ templates language-lawyer overload-resolution c++14

16
推荐指数
1
解决办法
403
查看次数