enable_if只有C ++ 11吗?

时间:2015-07-26 14:13:02

标签: 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;
    }

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

1 个答案:

答案 0 :(得分:5)

enable_if被添加到C ++ 11(source)中的标准中。它不依赖于任何C ++ 11标准功能,所以它代码可以在C ++ 03中自己编码,正如您可以从这种可能的实现中看到的那样

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

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

这只是使用template metaprogramingSFINAE

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