sizeof <integral type =“”>不接受为整数模板参数</integral>

时间:2012-10-16 07:58:52

标签: c++ templates c++11

编译器(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中描述。

1 个答案:

答案 0 :(得分:2)

您想使用sizeof(bool)而不是sizeof<bool>。那是sizeof不是模板。

相关问题