-2

编译器(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标准没有指定 a 的大小,因此我想使用更便携的方式并根据bool.

这真的是格式错误的 C++11 吗?

标准说:

非类型、非模板模板参数的模板参数应为以下之一:

整数或枚举类型的整数常量表达式;或非类型模板参数的名称;或具有外部链接的对象或函数的地址,包括函数模板和函数模板 ID,但不包括非静态类成员,表示为 & id-expression 其中 & 是可选的,如果名称引用函数或数组,或如果相应的模板参数是参考;或指向成员的指针,如 5.3.1 中所述。

4

1 回答 1

2

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

于 2012-10-16T08:06:20.717 回答