問題タブ [name-lookup]
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++ - この構文は違法ですか?
以下は、GCC 4.8.1 ではコンパイルされません。
[エラー] 'tag' の前に ')' が必要です。ただし、Visual Studio 2013でコンパイルされます.VS2013がそれを受け入れるのが正しいかどうか知りたいです。Tagの外側で宣言するとコンパイルされますが、それが属する場所の内側でBase<T>宣言したいと思います。を使用しても役に立ちませんでした。上記を修正して、両方のコンパイラがこれを受け入れるようにする方法。TagBase<T>Derived(Base<T>::Tag tag) : Base<T>(tag) {}TagBase<T>
c++ - この従属名の検索で、メソッドではなくグローバル識別子が検出されるのはなぜですか?
コンパイラが解決しようとすると、メソッドon ( ideone )ではなく、グローバル名前空間i.template hi<T>();で検出されます。なんで?hihii
g++ 4.9.1/4.9.2 ( -std=c++11) を使用しています。正確なエラー メッセージ:
このコードは Clang と VS2013 では問題なく動作しますが、g++ と EDG ではエラーが発生します。しかし、どのコンパイラが正しいのでしょうか?
メンバーの名前を変更する以外にこれを解決する方法はありますか? std私の実際のコードでは、名前空間からの型 (たとえば、を介してインポートされusing namespace stdたもの) がメンバー関数の 1 つと同じ名前を持つ場合に競合が発生します。明らかに、実装コードが堅牢であり、ユーザー コードでランダムな名前の衝突が発生しないようにしたいと考えています。
c++ - C++ は、テンプレート関数で 2 番目のパスの名前ルックアップを強制します
テンプレートのインスタンス化中に (前ではなく)、特定のシンボルの名前検索を C++ コンパイラに強制的に実行させる方法はありますか?
次のコードがあるとします。
そのコードをコンパイルして、 の定義の前に のfすべての定義が利用可能であったかのように同じ結果を得るために、( の定義を先頭に移動する以外に) できることはありますか?fwrapper
おそらく、この質問を適切に表現する方法がわからないため、何も見つかりませんでした。これが役立つ場合、すべての引数の型はfユーザー定義型であると見なすことができます。
c++ - テンプレート メソッドの宣言の影響を受ける C++ 名のルックアップ
次の C++ コード スニペット (GCC-4.7 でテスト済み) の static_cast の必要性がわかりません。
static_cast を省略すると、以下を使用する必要があるため、リンカー エラーが発生します。
それ以外の:
一方、テンプレート化されたメソッドを次のように置き換えると (上記のスニペットでコメントアウトされています):
その後、エラーは発生せず、「正しい」メソッドが実行時に呼び出されることがわかります (つまり、
)。
テンプレート メソッドの宣言が名前の検索に影響するのはなぜですか? よろしくお願いします。
c++ - ネストされた名前指定子で無視される関数名の例を見たい
N4140 の 53 ページの脚注 (33):
関数名が無視されるルックアップには、nested-name-specifier、evalated-type-specifier、または base-specifierに現れる名前が含まれます。
c++ - using ディレクティブによるあいまいな名前の検索
同じ名前の名前空間とクラスを 1 つの宣言領域に入れることは許可されていません。
形式が正しくありません (§3.3.1 /4 を参照)。ただし、using ディレクティブを介していずれかの名前を導入できます。
このコードは形式が正しくありませんか? VC++はClangと同様にそう考えています:
ただし、GCC はそれを受け入れます。
誰が正しいですか?
c++ - 名前検索の問題、GCC と clang の不一致
ecatmur が指摘したように、この質問には既に回答がありますここ。
この質問は明らかに、可変個引数テンプレート関数で decltype を使用した末尾の戻り値の型の複製ではありません。実際には、そのスレッドの問題に対処するためのより簡単な解決策を提案しようとしています。問題は、GCC と clang が一致しないため、このソリューションが標準に従って正しいかどうかです。質問をもう少し注意深く読んでください。
この質問は、これに触発されています。既に提供されているものよりも簡単な解決策を考え出そうとしていますが、最終的には次のようになります。
このソリューションは GCC で機能しますが、clang ではまったく問題を解決しません。ということで、どちらが正しいか悩んでいます。
c++ - テンプレート内のローカル クラス メンバーの名前検索
ラムダをシミュレートする次のコードを検討してくださいconstexpr(C++17 用に提案されており、C++14 では使用できません)。
ここで、lambdaはクラス テンプレートの関数テンプレート メンバー内で定義されます。驚いたことに、this->メンバーlambda変数n_とx_.
実際の例( withthis->、withoutthis-> )
これは依存する基本クラスでのみ必要であるという印象を受けましたが、そのlambdaクラスは単なるローカル クラスであり、依存する基本クラスではありません。
質問: テンプレート内のローカル クラス メンバーの名前検索に関連する標準を教えてもらえますか?