C++と色々

主にC++やプログラムに関する記事を投稿します。

Visual C++ 2013 CTPのオーバーロード解決がバグっている

これで3~4時間詰まった… 以下のコードがコンパイルエラーになる

#include <initializer_list>

void f(int) {}
void f(std::initializer_list<int>) {}

int main() {
  f({10});
}
/*
1>  prog.cpp
1>prog.cpp(7): error C2668: 'f' : ambiguous call to overloaded function
1>          prog.cpp(4): could be 'void f(std::initializer_list<int>)'
1>          prog.cpp(3): or       'void f(int)'
1>          while trying to match the argument list '(initializer-list)'
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

*/

恐らくUniform initializationとinitializer listが曖昧になっていると思われる。
gccやclangは4.7.3や3.0の頃から問題なくビルドできる。

以下愚痴
Visual C++にもいいところがあるはずという、超ポジティブ思考で使っていたが、 使えば使うほど実装の劣り、容易に発生するICE、こういったバグなど、萎える事象が次々に起こるので辛いです…