問題タブ [compiler-bug]
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++ - (デフォルト) すべての可変長型のオブジェクトを構築します
次のコード スニペットを検討してください。
ここでやりたいことは、デフォルトでメソッドstd::string
内に 2 つのオブジェクトを構築Bar
し、それらを に渡すことFoo
です。しかし、私の無駄な試み(そのうちの1つはスニペットにあります)はコンパイルできないので、これが可能かどうか疑問に思っています。
VC 2013 でコンパイルしたところ、コンパイラ エラーが発生しました。コメントに記載されているように、他のコンパイラはそれを処理できます。上記のスニペットが標準に準拠しているかどうかは誰にもわかりますか?
c++ - 可変個引数テンプレートで遊んでいるときに G++ エラーが発生しました
G ++では、私は得る
他の誰かがこれに遭遇しましたか?これはコンパイラの実際のバグですか、それとも私のコードのバグですか?
私は走っています
フラグ付き -std=gnu++0x -O2 -g
c++ - C++: 奇妙な "is private" エラー
タイプエイリアスがプライベートであると主張するg ++から非常に珍しいエラーが発生しました。コードを何時間も削減した後、次の最小限のテスト ケースにたどり着きました。
g++ 4.8.2 のエラーは次のとおりです。
Clang 3.4 は同じコードを受け入れます。ここで何が起こっているのですか、これは g++ のバグですか?
次のいずれかを実行すると、エラーが発生しなくなります。
- テンプレート
Test
クラスではなく、クラスに変換します。 - 関数内のステートメントを削除します。
- に変わり
TheCatDog::Dog::bark();
ますCatDog::Dog::bark();
。 - クラスを削除し、
CrazyHouse
その内容を にマージしTest
ます。 - クラスを削除し、
CatDog
その内容を にマージして、エイリアスを にTest
変更します。TheCatDog
Test
c++ - VS2013 のマクロで生の C++11 文字列
C++11 の raw 文字列のサポートに関して、Visual Studio 2013 コンパイラにバグがあるようです。
C++11 の新しい生の文字列は、たとえば次のようになりR"(\s(\d+))"
ます。正規表現や複数行の文字列に非常に便利です。Visual Studio 2013 (および VS 2012 November CTP) はそれらをサポートしていますが、生の文字列をマクロ (単純なものであっても) 内に配置すると、問題が発生する可能性があります。
この単純なコードはコンパイルされますが、アサーションで失敗します。
ノート:
- マクロは可能な限り単純です。
- 文字列内で右括弧を削除すると、すべてが機能します。
- 文字列内のバックスラッシュまたは
's'
文字が削除されると、コードはコンパイルされません!
それは本当にコンパイラのバグですか?はいの場合、それは既知のバグですか? 回避策はありますか?
memory-leaks - 'pointer' パラメータを持つメソッドが原因で Free Pascal のメモリ リークが発生する
AnsiString から TBytes (文字列の配列) へのハード型キャストを ToBytes メソッド (以下を参照) に置き換えた後、Delphi はメモリ リークを報告しませんでした - ただし、Free Pascal 2.6.2 では、TBytes 値がタイプのパラメータPointer
。
次のコードでは、メモリ リークが発生します。
メモリ リーク レポート:
Send メソッドを TBytes 型の引数を取るように変更すると、メモリ リークはなくなります。
c++ - C++ プリプロセッサの標準動作
プリプロセッサの正確な動作に関する C++ 標準を研究しています (ある種の C++ プリプロセッサを実装する必要があります)。私が理解していることから、以下の(理解を助けるために)作成した例は有効なはずです:
マクロ呼び出しのような最初の関数が(置換文字列内のコンマに注意してください) にdds(eoe)
置き換えられ、入力が再スキャンされたときと見なされることを期待しています。f(eoe,
f(eoe,su)
しかし、VC++2010 でのテストでは、これが得られました (前処理されたファイルを出力するように VC++ に指示しました)。
これは直感に反しており、明らかに正しくありません。VC++2010 のバグですか、それとも私の C++ 標準に対する誤解ですか? 特に、私のように置換文字列の最後にカンマを入れるのは間違っていますか? C++ の標準文法についての私の理解では、preprocessing-token
そこでは any が許可されています。
編集:
GCC または他のバージョンの VC++ を持っていません。誰かがこれらのコンパイラで検証するのを手伝ってくれませんか?
c++ - std::initializer_list の std::shared_ptr が途中で破棄されているようです
編集:これは実際には Visual Studio のバグが原因であり、既に修正されています。Update 2を Visual Studioに適用した後、この問題は再現できません(リリース候補はこちらから入手できます)。謝罪します; 私は自分のパッチで最新だと思っていました。
Visual Studio 2013 で次のコードを実行すると、なぜセグ フォールトが発生するのか、一生わかりません。
initializer_list
が作成されたshared_ptr
の所有権を取得し、 が終了するまでそれらをスコープ内に保持することを期待していましたmain
。
奇妙なことに、リストの 2 番目の項目にアクセスしようとすると、期待どおりの動作が得られます。例えば:
これらのことを考慮すると、これはコンパイラのバグである可能性があると推測していますが、なぜこの動作が予想されるのかについての説明を見落としていないことを確認したかったのです (たとえば、右辺値がinitializer_list
s でどのように処理されるかなど)。
この動作は他のコンパイラで再現できますか、または誰かが何が起こっているのか説明できますか?