問題タブ [using-declaration]

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 投票する
0 に答える
34 参照

c++ - ブロック スコープ内での再宣言の使用

コンパイル時エラーを引き起こすコードは次のとおりです。

デモ

標準の内容は次のとおりです ( N4296::7.3.3/10 [namespace.udecl]):

using-declaration は宣言であるため、複数の宣言が許可されている場所 (および場所のみ) で繰り返し使用できます。

したがって、ブロックスコープ内での再宣言は形式が正しくないと思いました。しかし、プログラム

デモ

正常に動作します。では、using 再宣言が実際にブロック スコープに 2 回出現しないのはなぜでしょうか?

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

c++ - SFINAE としての 'using' 宣言

usingテンプレートクラスからプライベートに派生している間、宣言にSFINAE (または別の手法) を使用できますか? 理解を深めるために、以下のコードを参照してください。

どうすれば望ましい動作に到達できますか (可能な場合)?

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

c++ - 匿名構造への参照にエイリアスを使用するとエラーが発生する

私の理論では、gcc にはバグがあります。以下は、clang と gcc の両方でコンパイルされます。

しかし、右辺値参照に変更すると、clang でコンパイルされますが、gcc ではコンパイルされません。

typedefバージョンでも同じエラーで失敗します:

これが gcc でコンパイルできないのはなぜですか? これは標準の問題ですか、それともバグですか?

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

c++ - 代入演算子のオーバーロードには同様の変換があります (VS のみ)

3 つのクラス (A、B、C) を持つクラス階層があります。A と B は、派生した Type でパラメーター化された基本クラスです。クラス C は、A と B の両方から派生します。

クラス B は型 A のオブジェクトの代入演算子を提供し、クラス C はこの代入演算子をusing super::operator=宣言と共に継承します。

タイプ A のオブジェクトからクラス B でコンストラクターを定義すると、Visual Studio 2013 でエラー: 2 つのオーバーロードが同様の変換を持っています(C2666) が表示されますが、gcc (4.8.2) でエラーや警告が表示されません。 、clang (3.4) および intel icc (Studio 2015)。(でコンパイル-Wall -pedantic)

ここに削減された例:

テンプレート化されたクラス A をテンプレート化されていないクラスに置き換えると、Visual Studio でもエラーなしでコンパイルされますが、これは解決できる方法ではありません。

私の質問は次のとおりです。この構成は、標準に準拠しているという意味で整形式ですか、それともエラーメッセージは正しいですか? B のコピー コンストラクターのような指定子はexplicit、問題の解決に役立ちますか?

ところで、Visual Studio では、クラス C のコピー代入演算子が原因で、警告:複数の代入演算子が指定されました (C4522) が表示されます。

0 投票する
0 に答える
395 参照

c++ - Visual Studio 2015 のバグ? あいまいなメンバー関数アクセス、ステートメントを使用して祖先クラスのオーバーライドの順序

何か不足していますか、それとも Visual Studio のバグを見つけましたか?

バグはさておき、このタイプの継承を使用することは問題ないのでしょうか?

GCC 4.9.0 では、期待どおりの結果が得られます。

ただし、VS 2015 (CTP 6) と VS 2013 (Update 5 CTP) の両方で、間違った結果と思われる結果が生成されます。

「クラスの派生クラス B : パブリックの派生クラス A、他のベースクラス {」を「クラスの派生クラス B : パブリックの他のベースクラス、派生クラス A {」に変更すると、期待どおりの結果が得られます。何かが欠けている可能性がありますが、継承元のクラスの順序は初期化の順序に影響しますが、使用するあいまいな関数に影響を与えるとは思われません。

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

c++ - MSVS ではなく GCC で宣言をコンパイルするのと同じスコープのクラス宣言

次のプログラムは、C++ 標準に従って整形式ですか?

さまざまなコンパイラでさまざまな結果が得られます。

  • gcc はエラーなしでコンパイルします。
  • Visual C++ でエラー C2888: 'X::A': シンボルを名前空間 'Y' 内で定義できません

私のプログラムが違反している C++ 標準の規則は見つかりません。

プログラムの形式が正しい場合、Visual Studio でエラーが発生するのはなぜですか?

プログラムが整形式でない場合、c++ 標準のどの規則に違反し、gcc がエラーを出さないのはなぜですか?

私は自分のプログラムをコンパイルしようとはしていません。C++ 標準に従って整形式であるかどうか、およびテストした 2 つのコンパイラの動作が異なる理由を調べようとしています。

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

c++ - using 宣言のチェーンを含むプログラムは、MSVS および clang でコンパイルされますが、GCC ではコンパイルされません。

次のプログラムは、C++ 標準に従って整形式ですか、それとも整形式ではありませんか?

さまざまなコンパイラでさまざまな結果が得られます。

このプログラムを GCC でコンパイルできるように修正したくありません。これについて C++ 標準が何を述べているのか、および 3 つのコンパイラの動作が異なる理由を知りたいだけです。また、これがこれらのコンパイラのいずれかのバグの結果であるかどうかも知りたいです。