std :: enable_if <>的错误

use*_*401 1 c++ stl visual-c++ c++11 visual-studio-2013

我试图在C++中使用基本的SFINAE模式和STL,std::enable_if<>并在第一个障碍时失败:

#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 );
}
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,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问题吗?

谢谢

Die*_*ühl 5

当您使用std::enable_if<false, bool>::type字面上没有什么可以取代.因此,代码总是错误的,编译器会报告错误.SFINAE仅适用于存在"S"(替换)且最终为"F"(失败)的情况.