#include <iostream>
#include <initializer_list>
using namespace std;
struct InitListConstructible {
InitListConstructible() = default;
InitListConstructible(std::initializer_list<int> elems) {
// do something
}
};
InitListConstructible operator+ (InitListConstructible lhs,
InitListConstructible rhs) {
return {};
}
void freeFunction(InitListConstructible lhs, InitListConstructible rhs) {
// Do nothing
}
int main() {
/* Totally fine - use initializer list constructor. */
InitListConstructible lhs = { 1, 2, 3 };
/* Totally fine - use overloaded + operator. */
auto legit = lhs + lhs;
/* Totally fine - second argument constructed from initializer list. */
freeFunction(lhs, { 1, 2, 3 });
/* Totally fine - explicit call to operator+. */
auto alsoLegit = operator+ (lhs, { 1, 2, 3 });
/* Not okay - reports error about expected primary-expression. */
auto error = lhs + { 1, 2, 3 };
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBJbml0TGlzdENvbnN0cnVjdGlibGUgewoJSW5pdExpc3RDb25zdHJ1Y3RpYmxlKCkgPSBkZWZhdWx0OwoJCiAgICBJbml0TGlzdENvbnN0cnVjdGlibGUoc3RkOjppbml0aWFsaXplcl9saXN0PGludD4gZWxlbXMpIHsKICAgIAkvLyBkbyBzb21ldGhpbmcKICAgIH0KfTsKCkluaXRMaXN0Q29uc3RydWN0aWJsZSBvcGVyYXRvcisgKEluaXRMaXN0Q29uc3RydWN0aWJsZSBsaHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluaXRMaXN0Q29uc3RydWN0aWJsZSByaHMpIHsKICAgIHJldHVybiB7fTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCn0KCnZvaWQgZnJlZUZ1bmN0aW9uKEluaXRMaXN0Q29uc3RydWN0aWJsZSBsaHMsIEluaXRMaXN0Q29uc3RydWN0aWJsZSByaHMpIHsKCS8vIERvIG5vdGhpbmcKfQoKaW50IG1haW4oKSB7CgkvKiBUb3RhbGx5IGZpbmUgLSB1c2UgaW5pdGlhbGl6ZXIgbGlzdCBjb25zdHJ1Y3Rvci4gKi8KCUluaXRMaXN0Q29uc3RydWN0aWJsZSBsaHMgPSB7IDEsIDIsIDMgfTsKCQoJLyogVG90YWxseSBmaW5lIC0gdXNlIG92ZXJsb2FkZWQgKyBvcGVyYXRvci4gKi8KCWF1dG8gbGVnaXQgPSBsaHMgKyBsaHM7CgkKCS8qIFRvdGFsbHkgZmluZSAtIHNlY29uZCBhcmd1bWVudCBjb25zdHJ1Y3RlZCBmcm9tIGluaXRpYWxpemVyIGxpc3QuICovCglmcmVlRnVuY3Rpb24obGhzLCB7IDEsIDIsIDMgfSk7CgkKCS8qIFRvdGFsbHkgZmluZSAtIGV4cGxpY2l0IGNhbGwgdG8gb3BlcmF0b3IrLiAqLwoJYXV0byBhbHNvTGVnaXQgPSBvcGVyYXRvcisgKGxocywgeyAxLCAyLCAzIH0pOwoJCgkvKiBOb3Qgb2theSAtIHJlcG9ydHMgZXJyb3IgYWJvdXQgZXhwZWN0ZWQgcHJpbWFyeS1leHByZXNzaW9uLiAqLwoJYXV0byBlcnJvciA9IGxocyArIHsgMSwgMiwgMyB9OwoJCglyZXR1cm4gMDsKfQ==
prog.cpp: In function ‘int main()’:
prog.cpp:36:21: error: expected primary-expression before ‘{’ token
auto error = lhs + { 1, 2, 3 };
^