【发布时间】:2016-02-25 12:09:18
【问题描述】:
我正在尝试在 C++ 中使用带有 STL std::enable_if<> 的基本 SFINAE 模式,但在第一个障碍中失败了:
#include <type_traits>
template< typename T >
typename std::enable_if< true, bool >::type // compiles fine
//std::enable_if< false, bool >::type // lots of errors
myFunction( T val )
{
// do stuff
return true;
}
void main()
{
int i = 0;
myFunction( i );
}
在第一种情况下,enable_if<true,bool> 按预期工作。在第二种情况下,enable_if<false,bool> 我希望编译会失败,并且只会出现一个类似于 'myFunction': identifier not found 的错误,但是我会收到多个以 'type' : is not a member of 'std::enable_if<false,bool>' 开头的错误,然后从那里传播更多错误。
一方面,编译器确实给出了错误,但另一方面,我认为重点是替换失败是不是错误吗?我错过了一个非常明显的观点吗?还是 VC 2013 有 SFINAE 问题?
谢谢
【问题讨论】:
-
enable_if在第一个模板参数为false时强制使用未定义的返回类型。有关更多信息,我建议阅读:stackoverflow.com/q/25284499/2642059
标签: c++ c++11 visual-c++ visual-studio-2013 stl