次のコードを検討してください。
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-11-