問題タブ [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++ - 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 コンパイラのバグですか? それとも私のコードが間違っていますか?
これがバグである場合、どうすればこれを機能させることができますか?
ご協力いただきありがとうございます。
古い質問
少し複雑なテンプレート「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 の最初のテンプレート パラメータを削除すると、どのように問題が解決するのでしょうか?
ご協力いただきありがとうございます。
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 ですか? (または両方?) 過負荷の解決に関する私の推論は適切ですか?
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も このコードをうまくコンパイルします。
どのコンパイラが適切で、標準に準拠した動作は何ですか?
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/
回避策、またはまったく機能しない場合の説明を探しています。
c++ - C++ 比較演算子が true または false を返さない
私は次のプログラムを持っています
このプログラムは true または false を出力すると思いますが、代わりに 216 を出力しg++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2
ます。それは予想される動作ですか、それともバグですか?等値演算子が bool とは異なる型を返すのはなぜですか?
- - - - - 編集 - - - - -
私の意図は、void にキャストすることではなく、v をそのメモリ位置に 216 を格納することです。代替プログラムは次のようになります。
または、たとえば 216 などのランダムな値を指す、初期化されていない bool ポインターを使用することもできます。
c++ - テンプレート引数とそれ自体のテンプレート引数の両方に、同じ名前の型が含まれています。関数シグネチャで秒を参照するにはどうすればよいですか?
次のコードを検討してください。
VS2012 ではコンパイルできません:
'U::t_type::{ctor} f(void)' の明示的なテンプレート引数が無効です
t_type
どうやら、コンパイラは、2 番目がtypename U::t_type::t_type
、同じ名前のネストされた型ではなく、コンストラクターに名前を付けていると結論付けているようです。状況を明確にするために私にできることはありますか?
c++ - g++ 4.9.1 での奇妙な "%a" 形式の動作を修正しますか?
コンパイラ: Windows 8.1 で Nuwen ディストリビューションの 64 ビット MinGW G++ 4.9.1。
コード:
Visual C++ で問題なく動作します (ただし、Visual C++ には逆の変換がないようです)。
が含まれて<iostream>
いない場合、g++ でも正常に動作します。
が含まれている場合にハングする奇妙な結果<iostream>
:
修正または回避策を求めています。