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