问题 模板无法编译:'double'不是模板常量参数的有效类型


template<typename T, T Min>
class LowerBoundedType {};
template<typename T> class vectorelement {};
template<> class vectorelement<Categorical> { typedef LowerBoundedType<double, 0.0> type; };

有错误:

 error: 'double' is not a valid type for a template constant parameter

7331
2018-06-24 00:24


起源



答案:


对非类型模板参数有效的唯一数字类型是整数和枚举。因此,您不能拥有类型的非类型模板参数 double


10
2018-06-24 00:25



我没有关于我的草案,C ++ 0x是否允许任何数字类型? - GManNickG
我不知道为什么这个规则是个好主意。 - Neil G
那么,它需要标准化精度和圆形w.r.t.浮点运算,不是吗?恕我直言,那是不行的。 - sellibitze
好吧,你可以把它拿走 int 但是使用用户定义的文字指定值 0.0_myfloat。这个文字可以调用一个文字操作符模板,它返回一个带有constexpr转换函数的文字类类型 int,返回一个定点小数。 - Johannes Schaub - litb
@sellibitze:嗯,这些细节是依赖于实现的,是的,但是这些细节在实现中是(至少通常)是一致的,所以 T<0.0> 总会产生相同的实例。至少有一个提议允许任何文字用作非类型参数,但它被拒绝(没有评论,似乎;或者我或者只是找不到与之相关的评论)。 - James McNellis


答案:


对非类型模板参数有效的唯一数字类型是整数和枚举。因此,您不能拥有类型的非类型模板参数 double


10
2018-06-24 00:25



我没有关于我的草案,C ++ 0x是否允许任何数字类型? - GManNickG
我不知道为什么这个规则是个好主意。 - Neil G
那么,它需要标准化精度和圆形w.r.t.浮点运算,不是吗?恕我直言,那是不行的。 - sellibitze
好吧,你可以把它拿走 int 但是使用用户定义的文字指定值 0.0_myfloat。这个文字可以调用一个文字操作符模板,它返回一个带有constexpr转换函数的文字类类型 int,返回一个定点小数。 - Johannes Schaub - litb
@sellibitze:嗯,这些细节是依赖于实现的,是的,但是这些细节在实现中是(至少通常)是一致的,所以 T<0.0> 总会产生相同的实例。至少有一个提议允许任何文字用作非类型参数,但它被拒绝(没有评论,似乎;或者我或者只是找不到与之相关的评论)。 - James McNellis