fork download
  1. #include <iostream>
  2. #include <initializer_list>
  3. using namespace std;
  4.  
  5. struct AddInitializerList {
  6. void operator+= (initializer_list<int> values) {
  7. // Do nothing
  8. }
  9.  
  10. void operator+ (initializer_list<int> values) {
  11. // Do nothing
  12. }
  13. };
  14.  
  15. template<class T> auto id(std::initializer_list<T> il) { return il;}
  16. template<class T> auto _ (std::initializer_list<T> il) { return il;}
  17.  
  18. template<class T> auto operator+(std::initializer_list<T> il) { return il; }
  19.  
  20. int main() {
  21. AddInitializerList adder;
  22. adder += {1, 2, 3}; // Totally legit
  23.  
  24. adder.operator+({1, 2, 3}); // okay!
  25. adder + id({1, 2, 3});
  26. adder + _({1, 2, 3});
  27.  
  28. adder + operator+({1, 2, 3});
  29.  
  30. adder + {1, 2, 3}; // Not okay!
  31.  
  32. return 0;
  33. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp: In function ‘int main()’:
prog.cpp:30:11: error: expected primary-expression before ‘{’ token
  adder +  {1, 2, 3};  // Not okay!
           ^
stdout
Standard output is empty