我正在使用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(标准::矢量)
我是否可以知道错误和注释的原因,以及为什么传递引用使编译时执行成为可能?