C ++ 11编译时间类型检查

时间:2017-09-20 00:42:47

标签: c++11 templates constexpr

我正在使用C ++ 11进行编译时类型检查。对于这个玩具代码:

template <typename T>
constexpr bool IsMyType(std::vector<T>&) // case 1: code works as expected
// constexpr bool IsMyType(std::vector<T>) // case 2: error
{
    return std::is_same<T, int>::value || std::is_same<T, float>::value;
}

std::vector<double> x;
constexpr bool result = IsMyType(x);
static_assert(result, "--> incompatible type!!");

当参数未通过引用传递时,g ++(v4.9.4)报告:

  

错误:'constexpr bool IsMyType(std :: vector)[with T = double]'   在一个常量表达式中调用        constexpr bool result = IsMyType(x);

     

注意:'constexpr bool IsMyType(std :: vector)[with T = double]'是   不能用作constexpr函数,因为:constexpr bool   IsMyType(标准::矢量)

我是否可以知道错误和注释的原因,以及为什么传递引用使编译时执行成为可能?

0 个答案:

没有答案