#include <initializer_list>
#include <iostream>
using namespace std;
void foo(const initializer_list<int>& row_vector) { cout << size(row_vector) << "x1 - FIRST\n"; }
void foo(const initializer_list<initializer_list<int>>& matrix) { cout << size(matrix) << 'x' << size(*begin(matrix)) << " - SECOND\n"; }
int main() {
foo({ 1, 2, 3 });
foo({ { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } });
foo({ { 1 }, { 2 }, { 3 } });
}
I2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIGZvbyhjb25zdCBpbml0aWFsaXplcl9saXN0PGludD4mIHJvd192ZWN0b3IpIHsgY291dCA8PCBzaXplKHJvd192ZWN0b3IpIDw8ICJ4MSAtIEZJUlNUXG4iOyB9CnZvaWQgZm9vKGNvbnN0IGluaXRpYWxpemVyX2xpc3Q8aW5pdGlhbGl6ZXJfbGlzdDxpbnQ+PiYgbWF0cml4KSB7IGNvdXQgPDwgc2l6ZShtYXRyaXgpIDw8ICd4JyA8PCBzaXplKCpiZWdpbihtYXRyaXgpKSA8PCAiIC0gU0VDT05EXG4iOyB9CgppbnQgbWFpbigpIHsKCWZvbyh7IDEsIDIsIDMgfSk7Cglmb28oeyB7IDEsIDIsIDMgfSwgeyA0LCA1LCA2IH0sIHsgNywgOCwgOSB9IH0pOwoJZm9vKHsgeyAxIH0sIHsgMiB9LCB7IDMgfSB9KTsKfQ==
prog.cpp: In function 'void foo(const std::initializer_list<int>&)':
prog.cpp:6:76: error: 'size' was not declared in this scope
void foo(const initializer_list<int>& row_vector) { cout << size(row_vector) << "x1 - FIRST\n"; }
^
prog.cpp: In function 'void foo(const std::initializer_list<std::initializer_list<int> >&)':
prog.cpp:7:86: error: 'size' was not declared in this scope
void foo(const initializer_list<initializer_list<int>>& matrix) { cout << size(matrix) << 'x' << size(*begin(matrix)) << " - SECOND\n"; }
^
prog.cpp: In function 'int main()':
prog.cpp:12:29: error: call of overloaded 'foo(<brace-enclosed initializer list>)' is ambiguous
foo({ { 1 }, { 2 }, { 3 } });
^
prog.cpp:6:6: note: candidate: void foo(const std::initializer_list<int>&)
void foo(const initializer_list<int>& row_vector) { cout << size(row_vector) << "x1 - FIRST\n"; }
^
prog.cpp:7:6: note: candidate: void foo(const std::initializer_list<std::initializer_list<int> >&)
void foo(const initializer_list<initializer_list<int>>& matrix) { cout << size(matrix) << 'x' << size(*begin(matrix)) << " - SECOND\n"; }
^