問題タブ [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.
c++ - 条件演算子の戻り値の型と 2 フェーズ ルックアップ
次のスニペットを検討してください。
この場合、f
atへの関数呼び出し// 1
はフェーズ 1 で検索する必要があると思います。その引数の型は明白であり、スコープ内の唯一のものにDerived&
解決されるからです。f(Base&)
Clang 3.8.0 は私に同意しますが、GCC 6.1.0 は同意せず、がピックアップさf
れるフェーズ 2 までのルックアップを延期します。f(Derived&)
どのコンパイラが正しいですか?
c++ - テンプレートクラスの従属型名をフレンドリにする
Device
、、、Register
およびの3 つのクラスがWriteOnlyPolicy
次のように定義されています。
デバイス
登録
書き込み専用ポリシー
Register
WriteOnlyPolicy
このスキームで実際にインスタンス化されることはありませんが、ポリシーでクラスの保護された関数を呼び出す必要がありますwriteDeviceRegister
。デバイス固有の実装ではなく、クラスのユーザーDevice
にのみ関数を公開したいので、その関数を公開したくありません。write
Device
友達になりたいRegister::access_policy
(この場合はWriteOnlyPolicy
、テンプレート引数として指定されたクラス) を許可するために、テンプレート クラスの依存型名を友達にする構文がわかりません。これは可能ですか?
などfriend
のクラスに宣言を入れることを考えましたDevice
トリックを行いますが、エラーが発生します
エラー: ';' の前に unqualified-id が必要です トークン
c++ - テンプレート クラスに基本クラスがないのに、なぜ「this」は型依存の式なのですか?
次のコードは、エラーなしでコンパイルできます。
そして、それthis
は型に依存する式であるためwhatever
、実際のテンプレート引数が判明するまで名前の検索が延期されるためであることはわかっています。この場合、メンバー関数f()
は使用されないため、 のインスタンス化はA<T>::f
存在せず、 の名前検索whatever
は実行されません。
this
クラステンプレートに次のようなタイプ依存のベースがある場合、それはタイプ依存であることを理解できます。
テンプレート クラス の定義を解析するとき、そのベースの型を知るA
ことは不可能です。それどころか、メンバー関数がどこかで使用されるとすぐに、最初の例で合法になる可能性は見当たりません。this->whatever
B<T>
whatever
this->whatever
f
this->whatever
では、最初の例のいくつかの点で合法である可能性はありますか? this
そうでない場合、その場合に型依存の式として扱われるべき他の理由はありますか?
c++ - 明示的なパラメーターを使用して、テンプレート化された関数内からテンプレート化されたクラスのテンプレート化されたメンバーを呼び出す
GCC は、行 A では小なり演算子を認識しますが、行 B では認識しません<
。
書く必要がないように、GCCがMSVCと同じように行Aを処理できる「リラックスモード」がありますm.template f<1>(1)
か?