問題タブ [dependent-name]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
612 参照

c++ - typename キーワードとネストされた名前指定子

最初のケースは正しいのに、2 番目のケースは正しくないのはなぜですか? その制限の意味がわかりません。
とにかく、なぜ最初のケースが許可されているのですか? ::Aテンプレート パラメータに依存する名前ではありません。その意味は何ですか?

0 投票する
2 に答える
1566 参照

c++ - 非型テンプレート パラメータに依存する static_assert (gcc と clang で異なる動作)

で一般的なテンプレートのインスタンス化を無効にしようとしているときに、テンプレートがインスタンス化されていない場合でも上記のコードがアサート エラーを生成することをstatic_assert発見しました。clanggccHitchhiker42

いじってみると、次のように主張していることがわかりました。

両方のコンパイラで同じように動作します。アサートは、一般的なテンプレートがインスタンス化された場合にのみ開始されます。

標準は何と言っていますか、どのコンパイラが正しいですか?

0 投票する
1 に答える
535 参照

c++ - 再び typename と template キーワードについて

このトピックに関する多くの回答を注意深く読みましたが、ネストされたテンプレート クラスのメンバーである非テンプレート関数のスコープで、これら 2 つのキーワードが必要な場合と必要でない場合を正確に把握できません。

私のリファレンス コンパイラは GNU g++ 4.9.2 と clang 3.5.0 です。

次のコードでは、何が起こるかを説明するためにコメントを埋め込んでいますが、それらの動作はほとんど変わりません。

では、スコープ内にf依存Pa<double>::Pe<BBB>する名前がありますか?

そしてどうPa<AAA>::Pe<int>ですか?

そして、結局のところ、引用された 2 つのコンパイラーのこのような異なる動作はなぜでしょうか?

誰でもパズルを解くことを明確にすることができますか?

0 投票する
1 に答える
466 参照

c++ - this-> が依存する基底クラスのメンバーにアクセスできるようにするルールは何ですか?

xご存知のように、メンバーが依存基底クラスにあるため、以下のコードは形式が正しくありません。ただし、指定された行に変更xするthis->xとエラーが修正されます。

この動作が標準でどのように指定されているかについて説明をお願いします。[temp.dep]/3 によると:

クラスまたはクラス テンプレートの定義で、基本クラスがテンプレート パラメーターに依存している場合、クラス テンプレートまたはメンバーの定義時点での非修飾名ルックアップ中、またはクラス テンプレートまたはクラス テンプレートのインスタンス化中のいずれかで、基本クラス スコープは検査されません。クラス テンプレートまたはメンバー。

xこれは、単独で使用すると失敗する理由を説明しているようです。名前xは定義の時点で調べられ、基本クラスのスコープは調べられません。しかし、 を使用するとどうなるthis->xでしょうか? 現在、名前xは依存しており、そのルックアップはインスタンス化まで延期されています。しかし、引用されたパラグラフは、 inのルックアップがまだ修飾されていないルックアップであるため、インスタンス化の時点でもそれをx見つけてはならないことを暗示しているようです。xthis->x

実装がこのように動作しないことは明らかであり、テンプレートがインスタンス化されると基本クラスのスコープ検索されることは広く理解されています。

  1. 引用された段落を誤解しましたか?
  2. 「正しい」動作を指定する段落はありますか?
0 投票する
2 に答える
141 参照

c++ - 従属名が実際に「テンプレート テンプレート パラメータ」であることを示すための「typename」と同等

適切な構文が見つからないコードの一部を最小限の例に減らしました。

次の定義を仮定しましょう (「理由」について心配する必要はありません ;)

現在、C++11 以降では、クラス テンプレートまたは型エイリアス テンプレートのいずれかを使用して、テンプレートをインスタンス化できますClient。次の関数は問題なくコンパイルされます。

しかし、次の場合、与えられたテンプレート引数Clientが従属名である場合、適切な構文を見つけることができません:

Clang (3.6 でテスト済み) は、次のコンパイル エラーを出力しています。

この構文を修正できますか?

0 投票する
1 に答える
59 参照

c++ - 親クラスの変数の使用

テンプレートを使用してスタックを実装しようとしています。私の質問は、この状況で親クラスの変数をどのように使用するのですか?

この場合、私のコンパイル エラーは次のとおりです。'top, a, size' はこのスコープで宣言されていません。