185125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner// RUN: %clang_cc1 -verify -std=c++11 %s 285125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner 385125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turnertemplate<typename T> struct complex { 485125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner complex(T = T(), T = T()); 585125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner void operator+=(complex); 685125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner T a, b; 785125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner}; 885125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner 985125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turnervoid std_example() { 1085125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner complex<double> z; 1185125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner z = { 1, 2 }; 1285125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner z += { 1, 2 }; 1385125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner 1485125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner int a, b; 1585125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner a = b = { 1 }; 1685125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner a = { 1 } = b; // expected-error {{initializer list cannot be used on the left hand side of operator '='}} 1785125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner a = a + { 4 }; // expected-error {{initializer list cannot be used on the right hand side of operator '+'}} 1885125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner a = { 3 } * { 4 }; // expected-error {{initializer list cannot be used on the left hand side of operator '*'}} \ 1985125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner expected-error {{initializer list cannot be used on the right hand side of operator '*'}} 2085125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner} 2185125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner 2285125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turnerstruct S { 2385125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner constexpr S(int a, int b) : a(a), b(b) {} 2485125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner int a, b; 2585125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner}; 2685125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turnerstruct T { 2785125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner constexpr int operator=(S s) const { return s.a; } 2885125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner constexpr int operator+=(S s) const { return s.b; } 2985125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner}; 3085125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turnerstatic_assert((T() = {4, 9}) == 4, ""); 3185125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turnerstatic_assert((T() += {4, 9}) == 9, ""); 3285125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner 3385125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turnerint k1 = T() = { 1, 2 } = { 3, 4 }; // expected-error {{initializer list cannot be used on the left hand side of operator '='}} 3485125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turnerint k2 = T() = { 1, 2 } + 1; // expected-error {{initializer list cannot be used on the left hand side of operator '+'}} 3585125480c07e11d5dd98f69b71bded86ee903075David 'Digit' Turner