#include <iostream>
#include <initializer_list>
using namespace std;
struct AddInitializerList {
void operator+= (initializer_list<int> values) {
// Do nothing
}
void operator+ (initializer_list<int> values) {
// Do nothing
}
};
template<class T> auto id(std::initializer_list<T> il) { return il;}
template<class T> auto _ (std::initializer_list<T> il) { return il;}
template<class T> auto operator+(std::initializer_list<T> il) { return il; }
int main() {
AddInitializerList adder;
adder += {1, 2, 3}; // Totally legit
adder.operator+({1, 2, 3}); // okay!
adder + id({1, 2, 3});
adder + _({1, 2, 3});
adder + operator+({1, 2, 3});
adder + {1, 2, 3}; // Not okay!
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBBZGRJbml0aWFsaXplckxpc3QgewoJdm9pZCBvcGVyYXRvcis9IChpbml0aWFsaXplcl9saXN0PGludD4gdmFsdWVzKSB7CgkJLy8gRG8gbm90aGluZwkKCX0KCQoJdm9pZCBvcGVyYXRvcisgKGluaXRpYWxpemVyX2xpc3Q8aW50PiB2YWx1ZXMpIHsKCQkvLyBEbyBub3RoaW5nCgl9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBUPiBhdXRvIGlkKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiBpbCkgeyByZXR1cm4gaWw7fQp0ZW1wbGF0ZTxjbGFzcyBUPiBhdXRvIF8gKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiBpbCkgeyByZXR1cm4gaWw7fQoKdGVtcGxhdGU8Y2xhc3MgVD4gYXV0byBvcGVyYXRvcisoc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IGlsKSB7IHJldHVybiBpbDsgfQoKaW50IG1haW4oKSB7CglBZGRJbml0aWFsaXplckxpc3QgYWRkZXI7CglhZGRlciArPSB7MSwgMiwgM307ICAvLyBUb3RhbGx5IGxlZ2l0CgoJYWRkZXIub3BlcmF0b3IrKHsxLCAyLCAzfSk7ICAvLyBva2F5IQoJYWRkZXIgKyBpZCh7MSwgMiwgM30pOwoJYWRkZXIgKyAgXyh7MSwgMiwgM30pOwoJCglhZGRlciArICBvcGVyYXRvcisoezEsIDIsIDN9KTsKCglhZGRlciArICB7MSwgMiwgM307ICAvLyBOb3Qgb2theSEKCQoJcmV0dXJuIDA7Cn0=
prog.cpp: In function ‘int main()’:
prog.cpp:30:11: error: expected primary-expression before ‘{’ token
adder + {1, 2, 3}; // Not okay!
^