-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; };

ただし、 a のサイズはbool標準で指定されていないため、より移植性の高い方法を使用して、 のサイズに応じてレジスタ型を指定したいと思いますbool

これは本当に不正な形式の C++11 ですか?

標準は次のように述べています。

非型、非テンプレートのテンプレート パラメータのテンプレート引数は、次のいずれかになります。

整数型または列挙型の整数定数式。または非タイプのテンプレート パラメータの名前。または、関数テンプレートおよび関数テンプレート ID を含むが非静的クラス メンバーを除く、外部リンケージを持つオブジェクトまたは関数のアドレス。名前が関数または配列を参照する場合、& はオプションです。対応するテンプレート パラメータが参照の場合。または、5.3.1 で説明されているように表現されたメンバーへのポインター。

4

1 に答える 1

2

sizeof(bool)ではなく使用したいsizeof<bool>。それはsizeofテンプレートではありません。

于 2012-10-16T08:06:20.717 に答える