编译器(GCC 4.7.2)似乎有这个代码的问题:
template<int BoolSize> struct BoolReg {};
template<> struct BoolReg<1> { static const Jit::RegType Val_t = Jit::u8; };
template<> struct BoolReg<2> { static const Jit::RegType Val_t = Jit::u16; };
template<> struct BoolReg<4> { static const Jit::RegType Val_t = Jit::u32; };
template <class T> struct JitRegType {};
template <> struct JitRegType<bool> { static const Jit::RegType Val_t = BoolReg< sizeof<bool> >::Val_t; };
它说:
错误:模板参数1无效
在上面代码的最后一行。传递整数文字而不是sizeof(bool)
时,它可以正常工作:
template <> struct JitRegType<bool> { static const Jit::RegType Val_t = BoolReg<1>::Val_t; };
但是,标准未指定bool
的大小,因此我想使用更便携的方式,并根据bool
的大小指定寄存器类型。
这真的是格式错误的C ++ 11吗?
标准说:
非类型非模板模板参数的模板参数 应该是以下之一:
整数或枚举类型的整数常量表达式;要么 非类型模板参数的名称;或对象的地址 或与外部链接功能,包括功能模板和 function template-ids但不包括非静态类成员, 表达为&amp; id-expression其中&amp;如果名称是可选的 指一个函数或数组,或者如果相应的 template-parameter是一个引用;或指向成员的指针表示为 在5.3.1中描述。
答案 0 :(得分:2)
您想使用sizeof(bool)
而不是sizeof<bool>
。那是sizeof
不是模板。