問題タブ [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.

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

c++ - Visual Studio c++ コンパイラのバグの可能性はありますか? テンプレート テンプレートの非型パラメーターに関する問題

新しい質問

編集

このバグはこれと同じようです:

MSVC は次のコードを拒否します。

エラー C3201: クラス テンプレート 'x' のテンプレート パラメーター リストが、テンプレート パラメーター 'X' のテンプレート パラメーター リストと一致しません

ただし、クラス テンプレート x には、パラメーター X と同じ一連のテンプレート パラメーターがあります。

地獄!このバグ レポートは 2012 年 4 月のものですか?!

ステータス: 延期としてクローズ

:(

マイクロソフト、残念です TT

編集の編集

私の場合 (以下)、自分のやりたいことをハックすることができますが、それは醜いです:

使用する:

コンパイラは、最適化中にメンバーのオフセットを変更できますか?

編集の終わり

新しい質問

以下はhttp://coliru.stacked-crooked.com/a/be088e06861f9349で問題なくコンパイルされます

しかし、Visual Studio 2013 では次のエラーが表示されます。

エラー C3201: クラス テンプレート 'LocalInfo_Problem7' のテンプレート パラメーター リストが、テンプレート パラメーター 'LocalInfo' のテンプレート パラメーター リストと一致しません

これは VS コンパイラのバグですか? それとも私のコードが間違っていますか?

ここにバグレポートを書きましたhttps://connect.microsoft.com/VisualStudio/feedback/details/933984/c-visual-studio-2013-compiler-bug-template-template-pointer-to-member-issue

これがバグである場合、どうすればこれを機能させることができますか?

ご協力いただきありがとうございます。

古い質問

少し複雑なテンプレート「typedef」に問題があります。

問題をできるだけ単純化して、私はこれを思いつきました:

Visual Studio 2013 でエラー C3201: クラス テンプレート 'BB' のテンプレート パラメーター リストがテンプレート パラメーター 'B' のテンプレート パラメーター リストと一致しません

何が悪いのかわかりません。

Foo<AA, BB, ptr>「に展開します」template <class AA, template <AA*> class BB, AA* ptr> struct Foo : BB<ptr> {}

理論的には、次のように定義すると (実際には以下をコンパイルしようとはしませんでした):

それで

のエイリアスにする必要があります

これは私には問題ないように見えます。

興味深いことに、次の 2 つのバリエーションは正常にコンパイルされます。

1/着替えtemplate <A*>template <AA*>template <Z*>

この回避策により、私のプログラムは正常に実行されましたが、これは私のテンプレート アプローチの目的を無効にします。

または 2/ Bar の最初のテンプレート パラメータを削除する

では、コンパイラによって言及された不一致は何ですか?

Bar の最初のテンプレート パラメータを削除すると、どのように問題が解決するのでしょうか?

ご協力いただきありがとうございます。

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

c++ - VC++ 2012 での予期せぬあいまいなオーバーロード解決

Visual C++ 2012. コード。コンパイルする必要があると思います。コンパイラは丁重に同意しません。再現を次のように絞り込みました。

したがって、過負荷解決の候補が 2 つあります。最初のオーバーロードの場合、最初の引数は正確に一致し、2 番目の引数は整数変換 (符号なしから符号付き) を必要とします。2 番目のオーバーロードの場合、2 番目の引数は正確に一致し、最初の引数には cv 調整が必要です (&bは非 const へのポインターであるため)。

さて、これは完全に明白であるように思われます。オーバーロード 1 の場合、最初の引数はオーバーロードの解決に関する標準のセクションで定義されている「完全一致」ですが、2 番目の引数は「変換」です。オーバーロード 2 の場合、両方の引数が「完全一致」です (修飾変換は ID と同じランクになります)。したがって (私の明らかに不完全な推論が続く)、過負荷 2 を曖昧さなく選択する必要があります。それでも:

GCC は、デフォルトの方言と C++11 (ありがとう、IDEOne!) の両方で、コードに問題ないようです。したがって、私はこれを MSVC のバグに結び付ける傾向がありますが、(a) 自分のバグをコンパイラのバグだと考えている人々について彼らが何を言っているのか知っています。(b) これはかなり明らかなバグのようです。 、適合性テスト中に危険信号を送信したであろう種類。

これは非準拠の MSVC ですか、それとも非準拠の GCC ですか? (または両方?) 過負荷の解決に関する私の推論は適切ですか?

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

c++ - 配列参照と暗黙のコンストラクター: gcc のバグかどうか?

次のコードは、clang 3.5.0では正常にコンパイルされますが、 gcc 4.9.0ではコンパイルされません(フラグと,およびフラグ-Wall -Wextra -pedantic-errorsのいずれかを使用):-std=c++03-std=c++11-std=c++14

MS VC 2013も このコードをうまくコンパイルします

どのコンパイラが適切で、標準に準拠した動作は何ですか?

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

c++ - Visual Studio 2013 のメンバー関数テンプレート パラメーターへのポインター

コーナーケースに遭遇し、回避策を探しています。コンパイラのバグであるとほぼ確信しており、何も思いつきませんでした。オプションでメンバー関数へのポインターを必要とするクラスがあります。オプションにするために、デフォルト値を nullptr にしました。無関係な変更を加えるまでは機能していました。ビジュアルスタジオでは、「無効なテンプレート引数、コンパイル時の定数が必要です」が発生するようになりました。それはまだGCCで動作します。作業ケースは次のとおりです。

動かないケースはこちら

何らかの理由で、キーの取得を型から分割できないため、コンストラクターで keyfn を提供したくなるかもしれませんが、それは不可能です。2 番目のバージョンは、KeyFn_ が nullptr (または 0) の場合にのみ失敗します。クラスメンバーを指定すると、問題なくコンパイルされます。

完全なソース コードも利用できます。

http://sourceforge.net/p/gorgon-ge/code/ci/gscript/tree/

作業リビジョン:

http://sourceforge.net/p/gorgon-ge/code/ci/77d287af75c2301fce55ab97ba49362f7ef6d9e0/tree/

回避策、またはまったく機能しない場合の説明を探しています。

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

c++ - C++ 比較演算子が true または false を返さない

私は次のプログラムを持っています

このプログラムは true または false を出力すると思いますが、代わりに 216 を出力しg++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2ます。それは予想される動作ですか、それともバグですか?等値演算子が bool とは異なる型を返すのはなぜですか?

- - - - - 編集 - - - - -

私の意図は、void にキャストすることではなく、v をそのメモリ位置に 216 を格納することです。代替プログラムは次のようになります。

または、たとえば 216 などのランダムな値を指す、初期化されていない bool ポインターを使用することもできます。

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

c++ - テンプレート引数とそれ自体のテンプレート引数の両方に、同じ名前の型が含まれています。関数シグネチャで秒を参照するにはどうすればよいですか?

次のコードを検討してください。

VS2012 ではコンパイルできません:

'U::t_type::{ctor} f(void)' の明示的なテンプレート引数が無効です

t_typeどうやら、コンパイラは、2 番目がtypename U::t_type::t_type、同じ名前のネストされた型ではなく、コンストラクターに名前を付けていると結論付けているようです。状況を明確にするために私にできることはありますか?

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

c++ - g++ 4.9.1 での奇妙な "%a" 形式の動作を修正しますか?

コンパイラ: Windows 8.1 で Nuwen ディストリビューションの 64 ビット MinGW G++ 4.9.1。

コード:


Visual C++ で問題なく動作します (ただし、Visual C++ には逆の変換がないようです)。


が含まれて<iostream>ない場合、g++ でも正常に動作します。


が含まれている場合にハングする奇妙な結果<iostream>:

修正または回避策を求めています。