enable_if只有C++ 11吗?

use*_*093 4 c++

在C++参考网站上查看enable_if,据说它只是一个C++ 11特性.

但是,我使用C++ 98类型的GCC编译器编译了我自己的enable_if版本,该版本运行良好,似乎能够适用于任何版本的C++(打印1):

#include <iostream>

namespace egg
    {
    template<bool B,
        typename T = void>
        struct enable_if
        {
        };

    template<typename T>
        struct enable_if<true, T>
        {
        typedef T type;
        };
    }

int main()
    {
    egg::enable_if<1 == 1, int>::type x = 1;
    std::cout << x << std::endl;
    }
Run Code Online (Sandbox Code Playgroud)

我是否正确地说,enable_if实际上是任何C++版本的一个功能,但只是引入了C++标准,还是有其他原因?

Nat*_*ica 5

enable_if被添加到C++ 11(源代码)的标准中.它不依赖于任何C++ 11标准功能,所以它代码可以在C++ 03中自己编码,你可以从这个可能的实现中看到

template<bool B, class T = void>
struct enable_if {};

template<class T>
struct enable_if<true, T> { typedef T type; };
Run Code Online (Sandbox Code Playgroud)

这只是使用模板元编程SFINAE.

您也可以使用boost::enable_if自己编写的,而不是C++ 98/03兼容.