テンプレート引数なしで派生クラスでテンプレートクラス名を使用することは合法ですか?

コンストラクタ

次のコードは、clang ++ 8.0.0g ++ 9.1.0の両方で正常にコンパイルされます(コンパイルフラグは-Wall -Wextra -Werror -pedantic-errors):

template <typename>
struct Base
{
};

struct Derived : Base<int>
{
    Base base()
    {
        return Base();
    }
};

int main()
{
}

これらのコンパイラのバグですか、それともC ++標準の機能ですか?

Radoslaw Cybulski

このコードは問題ありません。から継承するため内部DerivedクラスBaseはを参照します。はい、合法です。Base<int> DerivedBase<int>

標準:

14.6.1.1:通常の(非テンプレート)クラスと同様に、クラステンプレートには注入されたクラス名があります(第9節)。挿入されたクラス名は、テンプレート名またはタイプ名として使用できます。template-argument-list、テンプレートtemplate-parameterのtemplate-argument、またはフレンドクラステンプレート宣言のelaborated-type-specifierの最終識別子として使用される場合、クラステンプレート自体を参照します。 。それ以外の場合は、<>で囲まれたクラステンプレートのtemplate-nameの後にtemplate-parametersが続くのと同じです。

また:

3.4.3:クラスの注入されたクラス名(第9節)も、名前の非表示と検索の目的で、そのクラスのメンバーであると見なされます。

最後の文はそれをします。要するに、A<B>隠された「エイリアス」を導入しますが、。なしで使用されるA = A<B>場合にA限り<>ます。例では、基本クラスに導入され、派生クラスは基本クラスのすべてのメンバーを継承します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

派生クラスのメンバーテンプレートクラスの部分的なクラス内特殊化を実行することは合法ですか?

分類Dev

外部クラスの可変個引数テンプレートからの引数を使用して、可変個引数テンプレートの内部クラスを部分的に特殊化することは合法ですか?

分類Dev

型テンプレートパラメータのテンプレート引数の一部として型を宣言することは合法ですか?

分類Dev

テンプレート引数の推定/置換がstd :: tupleおよびテンプレート派生クラスで失敗するのはなぜですか?

分類Dev

メンバー関数でクラス テンプレートを使用することはできますか?

分類Dev

ラムダでキャプチャされたconst値をテンプレート引数として使用することは合法ですか?

分類Dev

派生クラスのテンプレート引数をCRTPのベースに転送できますか?

分類Dev

可変個引数テンプレートから複数の基本クラスコンストラクターを呼び出すことは可能ですか?

分類Dev

可変個引数テンプレートクラスで必要なこの前方宣言は何ですか?

分類Dev

内部クラスで参照テンプレート引数を使用する

分類Dev

可変個引数テンプレートクラスでboostmpllambdaを使用する

分類Dev

クラスとそのクラスのメンバー関数を使用するためのテンプレートを取得することは可能ですか?

分類Dev

テンプレート名が派生クラスで使用できるのはなぜですか(基本クラスはテンプレートのインスタンスです)?

分類Dev

テンプレートを使用して派生クラスの基本クラスのエイリアスを使用できないのはなぜですか?

分類Dev

テンプレートパラメータなしでクラステンプレートでクラス名を使用する

分類Dev

テンプレートのテンプレートが使用されているにもかかわらず、「クラステンプレートの使用にはテンプレート引数リストが必要です」エラー、したがってテンプレートクラスが必要です

分類Dev

変数をCSSクラスとしてDjangohtmlテンプレートに渡すことは可能ですか?

分類Dev

クラス自体をテンプレートパラメータとして使用するクラス内にtypedefを配置することは有効ですか?

分類Dev

「クラステンプレートのテンプレート引数の推定」は、可変個引数クラステンプレートの空のパラメータパックを推定することになっていますか?

分類Dev

コンテナテンプレートクラスをC ++で抽出することは可能ですか?

分類Dev

テンプレート基本クラスのテンプレートテンプレート引数としてのサブクラス。これは、サブクラス関数パラメーターです。

分類Dev

テンプレート引数として有効な定義のないクラス宣言ですか

分類Dev

テンプレート引数リストを明示的に指定できないので、テンプレートパラメーターパックが関数引数型で使用されるのはなぜですか

分類Dev

テンプレート引数リストを明示的に指定できないので、テンプレートパラメーターパックが関数引数型で使用されるのはなぜですか

分類Dev

テンプレート引数リストを明示的に指定できないので、テンプレートパラメーターパックが関数引数型で使用されるのはなぜですか

分類Dev

テンプレートクラスを別のクラスのタイプ名として使用するにはどうすればよいですか?

分類Dev

自身を引数として使用するテンプレートクラス。C ++

分類Dev

クラスのテンプレート引数を抽出してそれらを反復処理する最もコンパクトな方法は何ですか?

分類Dev

テンプレート化されたクラスを引数の型として使用するにはどうすればよいですか?

Related 関連記事

  1. 1

    派生クラスのメンバーテンプレートクラスの部分的なクラス内特殊化を実行することは合法ですか?

  2. 2

    外部クラスの可変個引数テンプレートからの引数を使用して、可変個引数テンプレートの内部クラスを部分的に特殊化することは合法ですか?

  3. 3

    型テンプレートパラメータのテンプレート引数の一部として型を宣言することは合法ですか?

  4. 4

    テンプレート引数の推定/置換がstd :: tupleおよびテンプレート派生クラスで失敗するのはなぜですか?

  5. 5

    メンバー関数でクラス テンプレートを使用することはできますか?

  6. 6

    ラムダでキャプチャされたconst値をテンプレート引数として使用することは合法ですか?

  7. 7

    派生クラスのテンプレート引数をCRTPのベースに転送できますか?

  8. 8

    可変個引数テンプレートから複数の基本クラスコンストラクターを呼び出すことは可能ですか?

  9. 9

    可変個引数テンプレートクラスで必要なこの前方宣言は何ですか?

  10. 10

    内部クラスで参照テンプレート引数を使用する

  11. 11

    可変個引数テンプレートクラスでboostmpllambdaを使用する

  12. 12

    クラスとそのクラスのメンバー関数を使用するためのテンプレートを取得することは可能ですか?

  13. 13

    テンプレート名が派生クラスで使用できるのはなぜですか(基本クラスはテンプレートのインスタンスです)?

  14. 14

    テンプレートを使用して派生クラスの基本クラスのエイリアスを使用できないのはなぜですか?

  15. 15

    テンプレートパラメータなしでクラステンプレートでクラス名を使用する

  16. 16

    テンプレートのテンプレートが使用されているにもかかわらず、「クラステンプレートの使用にはテンプレート引数リストが必要です」エラー、したがってテンプレートクラスが必要です

  17. 17

    変数をCSSクラスとしてDjangohtmlテンプレートに渡すことは可能ですか?

  18. 18

    クラス自体をテンプレートパラメータとして使用するクラス内にtypedefを配置することは有効ですか?

  19. 19

    「クラステンプレートのテンプレート引数の推定」は、可変個引数クラステンプレートの空のパラメータパックを推定することになっていますか?

  20. 20

    コンテナテンプレートクラスをC ++で抽出することは可能ですか?

  21. 21

    テンプレート基本クラスのテンプレートテンプレート引数としてのサブクラス。これは、サブクラス関数パラメーターです。

  22. 22

    テンプレート引数として有効な定義のないクラス宣言ですか

  23. 23

    テンプレート引数リストを明示的に指定できないので、テンプレートパラメーターパックが関数引数型で使用されるのはなぜですか

  24. 24

    テンプレート引数リストを明示的に指定できないので、テンプレートパラメーターパックが関数引数型で使用されるのはなぜですか

  25. 25

    テンプレート引数リストを明示的に指定できないので、テンプレートパラメーターパックが関数引数型で使用されるのはなぜですか

  26. 26

    テンプレートクラスを別のクラスのタイプ名として使用するにはどうすればよいですか?

  27. 27

    自身を引数として使用するテンプレートクラス。C ++

  28. 28

    クラスのテンプレート引数を抽出してそれらを反復処理する最もコンパクトな方法は何ですか?

  29. 29

    テンプレート化されたクラスを引数の型として使用するにはどうすればよいですか?

ホットタグ

アーカイブ