問題タブ [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.
generics - Java 8 で生成された静的メソッド呼び出しがコンパイルされない
簡単に言うと、次のコードはJava 8ではコンパイルされていませんが、 Java 7 ではコンパイルおよび実行されていました。
前述の行でエラーが発生し、次のメッセージが表示されます: The method meth(Class<T>) in the type AnotherSpike is not applicable for the arguments (Class)
。
そのようなコードが100% typesafe ではないことは完全に理解していますが、 Java 8の本番コードで動作する非常によく似た呼び出しが必要です(そして、警告付きでコンパイルされ、 Java 7でうまく動作していました)。
興味深いことに、上記のコードは次の場合に正常にコンパイルされます (警告が表示されますが、これは問題ありません)。
/li>& IAliased<K>
メソッド署名から削除された場合:署名内
/li>& IAliased<K>
で置き換えられた場合:& IAliased
上記の 2 つの観察結果から、これはJava 8 コンパイラーに対する思慮深い機能強化ではなく、Java 8 のコンパイラーのバグに似ているという考えに至りましたが、私は間違っているかもしれません。
とにかく、コンパイラエラーなしでそのような署名を持つメソッドに生のインスタンスを渡す方法について、誰かがアドバイスできますか?Class
meth
助けてくれてありがとう!
c++ - 2 回ネストされた sizeof は従属式になることがありますか?
gcc 5.0 は次のコードを拒否し、clang 3.6 はそれを受け入れることに気付きました。
2 つのコンパイラsizeof(sizeof(T))
は、式が型依存か値依存かによって異なるようです。式が従属型である場合I<sizeof(sizeof(T))>
は、従属型であるということになります。つまり、必須であるtypename
必要があります。
これは、C++11 標準の次の文言でカバーされています。
[温度依存タイプ]/8
ある場合、型は従属です。
- テンプレート名がテンプレート パラメータであるか、いずれかのテンプレート引数が依存型または型依存または値依存の式である simple-template-id
[温度.dep.expr]/4
次の形式の式は型に依存しません (式の型は依存できないため)。
[temp.dep.constexpr]/2
次の形式の式は、unary-expression または expression が typedependent であるか、type-id が依存している場合、value-dependent です。
私の解釈では、それsizeof(T)
は型に依存するsizeof(sizeof(T))
ことはありません。つまり、型に依存したり、値に依存したりすることはできません。
これは gcc のバグですか?
c++ - throw または delete 式が依存することはありますか?
gcc 5.0 と clang 3.6 の両方typename
で、次の例のキーワードが必要です。
これは、C++11 標準の次の文言でカバーされています。
[除く]/2
throw 式は void 型です。
[expr.delete]/1
オペランドには、オブジェクト型へのポインター、またはオブジェクト型へのポインターへの単一の非明示的な変換関数を持つクラス型が必要です。結果の型は void です。
したがって、両方のケースでdecltype
生成されると想定しています。void
[expr.const]/2
conditional-expression は、潜在的に評価される部分式として次のいずれかを含まない限り、コア定数式です。
新しい式
スロー式
throw
これは、またはのいずれかを含む式がdelete
定数式ではないことを示唆しています。
[温度依存タイプ]/8
ある場合、型は従属です。
テンプレート名がテンプレート パラメータであるか、いずれかのテンプレート引数が依存型または型依存または値依存の式である simple-template-id
で表され
decltype(expression)
、式は型に依存します
SoB<decltype(..)>
は、式が型依存の場合にのみ依存します。
[温度.dep.expr]/4
次の形式の式は型に依存しません (式の型は依存できないため)。
これは、どちらの式も型に依存しないことを示唆しています。
gcc と clang はどちらも間違っていますか?
c++ - 単一の非型テンプレート パラメータ引数を持つ関数呼び出し式は型に依存しますか?
typename
次の例では、clang 3.6 と gcc 5.0 の両方が必要です。
これは、C++11 標準の次の文言でカバーされています。
[温度依存タイプ]/5
名前は、不明な専門分野のメンバーです。
- ネストされた名前指定子が現在のインスタンス化ではない依存型を指定する修飾 ID。
[温度依存タイプ]/8
ある場合、型は従属です。
未知の専門分野のメンバー、
テンプレート名がテンプレート パラメータであるか、いずれかのテンプレート引数が依存型または型依存または値依存の式である simple-template-id
で表され
decltype(expression)
、式は型に依存します
B<decltype(f(n))>::Type
これは、 が型依存である場合にのみ、型依存であることを示唆していB<decltype(f(n))>
ます。また、それは型B<decltype(f(n))>
依存の場合にのみf(n)
依存します。
[temp.dep.expr]/1
以下で説明する場合を除き、部分式が型依存である場合、式は型依存です。
[temp.dep.expr]/3
id-expression が含まれている場合、型に依存します。
依存型で宣言された 1 つまたは複数の宣言を使用した名前ルックアップによって関連付けられた識別子、
依存するテンプレート ID、
依存型を指定する conversion-function-id、または
未知の特殊化のメンバーを指定するネストされた名前指定子または修飾 ID。
または、一部の T に対して「T の未知の範囲の配列」型を持つ現在のインスタンス化の静的データ メンバーを指定する場合
これは、 が型依存であり、それが型依存でないf(n)
場合にのみ、型依存であることを示唆しています。n
n
何か不足していますか、それともコンパイラのバグですか?
templates - gcc/g++ 内部エラー (c++ テンプレート ラムダ)
プログラムにいくつかの変更を加えていたところ、突然 g++ が内部コンパイラ エラーを訴えました。
ただし、Clang は問題なくコンパイルし、警告も表示しません。これは、奇妙なことを示しています。
問題を次のように要約しました。
GCC 4.9.2 と 4.8.4 の両方を試しましたが、どちらも失敗しました (内部コンパイラ エラー)。
使用したフラグ:
g++ -std=c++11 -O0 -g -Wall main.cpp -o gccBin
clang++ -std=c++11 -O0 -g -Wall main.cpp -o clangBin
前述のように、Clang++(3.5.1) は問題なくコンパイルされます。また、どこでも同じ複数のマシンを試しました。
私が見落とした何らかのエラーはありますか?私はインターネットで少し検索しましたが、見つけた唯一の同様の問題は、今では修正されているはずです (バグトラッカーが述べているように)。
誰かが自分のマシンでこのコードを実行してみるか、他のアドバイスを与えることができますか?
ありがとうございました、
ラザロ
swift - typealias / typed / defined クロージャーの呼び出し時の Swift EXC_BAD_INSTRUCTION コンパイラ エラーまたは警告なし
構造体、クラス、および型付きクロージャーが与えられた場合:
次のコードは でクラッシュしEXC_BAD_INSTRUCTION
ます:
デバッガーには、 と の 2 つの異なる値が表示されprojectile
ますball
。のフィールドmass
がprojectile
無効です。ただし、クロージャーの内側と外側の両方mass
で有効です。ball
コンパイラ エラーや警告はありませんが、実行EXC_BAD_INSTRUCTION
時にスローprojectile.mass
されますか?
ForceComputation
誤解を招くデバッグ データにもかかわらず、問題はクロージャのパラメータとは何の関係もありません。問題は、返された構造体が次のオプションとして定義されていることですtypealias
。
ただし、オプションではない戻り値の型で構築されています ( ?
afterがないことに注意してくださいVector3d
):
上記のコードを変更して入力を削除します。
コードを修正するか、戻り値の型がオプションであることを確認します ( の?
後のメモVector3d
):
もこれを機能させます。EXC_BAD_INSTRUCTION
私の質問は、これがコンパイラのバグであり、Apple に報告する必要があるかどうか、またはスローされたコードをコンパイルする必要がある理由があるかどうかです。