我想要类型double
, float
, complex<double>
and complex<float>
通过一个static_assert
健康)状况。我估计static_assert(std::is_floating<T>::value, "some message")
可以解决这个问题,但是复杂类型没有通过这个测试(至少在 gcc-4.10 下)。
我会添加什么谓词来确保这四种类型(也许long double
s 也)被允许作为模板实例化,但除此之外什么都没有?
为标准库类型特征类添加特化通常是非法的,即使对于用户定义的类型也是如此。 §20.10.2 [meta.type.synop]/p1:
为任何以下项添加专业化的程序的行为
本子条款中定义的类模板是未定义的,除非
另有说明。
目前,允许用户添加专业化的唯一类型特征类是std::common_type
,如果专业化中至少有一个模板参数是用户定义的类型(第 20.10.7.6 [meta.trans.other],表 57)。
你需要写你自己的特质,这并不难:
template<class T>
struct is_complex_or_floating_point : std::is_floating_point<T> { };
template<class T>
struct is_complex_or_floating_point<std::complex<T>> : std::is_floating_point<T> { };
Demo http://ideone.com/y7U2p5.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)