0

以下は、可変個引数の非型ネストクラステンプレートを定義しますDEF。非型テンプレートパラメータは、に提供された型引数に従って異種である可能性がありますTs

template <typename ...Ts>
struct ABC {
  template <Ts ...Xs>
  struct DEF {};
};

オブジェクトは次のDEFように宣言できます。

ABC<int,bool>::DEF<17,true> x;

私の質問は、提供される非型テンプレート引数の数を、提供さDEFれる型テンプレート引数の数より少なくすることができるABCかということです。たとえば、次のいずれかの宣言が有効ですか。

ABC<int,bool>::DEF<17> y;
ABC<int,bool>::DEF<  > z;
4

1 に答える 1

2

いいえ、Ts...パック拡張であるためです。

§14.5.3 [temp.variadic]

p4パック拡張は、パターンと省略記号で構成され、そのインスタンス化により、リスト内のパターンのインスタンス化が0個以上生成されます(以下で説明)。パターンの形式は、拡張が発生するコンテキストによって異なります。パックの拡張は、次のコンテキストで発生する可能性があります。

  • [...]
  • パック拡張(14.1)であるテンプレートパラメーターパックの場合:
    • テンプレートパラメータパックがパラメータ宣言の場合; パターンは、省略記号のないパラメーター宣言です。
    • [...]

p6パック拡張のインスタンス化[...]は、リストE 1、E 2、...、E Nを生成します。ここNで、はパック拡張パラメーターの要素の数です。[...]

DEFしたがって、正確にかかるので、両方の例は形式が正しくありません<int, bool>

于 2012-11-22T00:28:12.317 に答える