次のコードを検討してください。
void f(double p) {}
void f(double* p) {}
int main()
{ f(1-1); return 0; }
MSVC 2017はそれをコンパイルしません。と1-1
同じ0
であるため、あいまいなオーバーロードされた呼び出しがあることを示しているため、に変換できますdouble*
。他のトリックは、のような0x0
、0L
またはstatic_cast<int>(0)
、いずれかの動作しません。を宣言しconst int Zero = 0
て呼び出しf(Zero)
ても同じエラーが発生します。それは場合にのみ正しく動作Zero
ではありませんconst
。
同じ問題がGCC 5以下に当てはまるようですが、GCC 6には当てはまりません。これがC ++標準の一部であるか、既知のMSVCバグであるか、コンパイラーの設定であるかどうか知りたいです。おおざっぱなグーグルは結果をもたらさなかった。
1-1
1
-