初期化子リストをいじっていて、いくつかの矛盾に気づきました。コンストラクターの最初の引数として initializer_list を使用すると、コンパイル エラーが発生しますが、これは、関数およびメンバー関数の場合、または他の引数が initializer_list の前にある場合には発生しません。
このコードは、私が何を意味するかを示しています。
#include <initializer_list>
using namespace std;
struct A
{
A(initializer_list<int> list){}
A(int a, initializer_list<int> list){}
A(initializer_list<int> list, int b){}
A(int a, initializer_list<int> list, int b){}
};
void B(initializer_list<int> list){}
void B(int a, initializer_list<int> list){}
void B(initializer_list<int> list, int b){}
void B(int a, initializer_list<int> list, int b){}
int main(int argc, char** argv)
{
// Ok
A a = {1};
A b(1, {2});
A c(1, {2}, 3);
B({1});
B(1, {2});
B({1}, 2);
B(1, {2}, 3);
// Error
A d({1});
A e({1}, 2);
return 0;
}
そしてビルド出力:
1>------ Build started: Project: Linal (Microsoft Visual C++ Compiler Nov 2012 CTP), Configuration: Release2 x64 ------
1> 'Microsoft Visual C++ Compiler Nov 2012 CTP' is for testing purposes only.
1> main.cpp
1>main.cpp(30): error C2059: syntax error : '{'
1>main.cpp(30): error C2059: syntax error : ')'
1>main.cpp(31): error C2059: syntax error : '{'
1>main.cpp(31): error C2143: syntax error : missing ';' before '}'
1>main.cpp(31): error C2143: syntax error : missing ')' before ';'
1>main.cpp(31): error C2059: syntax error : '}'
1>main.cpp(31): error C2059: syntax error : ')'
1>main.cpp(33): error C2059: syntax error : 'return'
1>main.cpp(34): error C2059: syntax error : '}'
1>main.cpp(34): error C2143: syntax error : missing ';' before '}'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
これは正しい動作ですか?もしそうなら、なぜこれが起こるのですか?