Tests for r151508.

llvm-svn: 151509
This commit is contained in:
Richard Smith 2012-02-26 23:49:01 +00:00
parent 9a6403a9de
commit 2fbb3d84a2
2 changed files with 34 additions and 0 deletions

View File

@ -0,0 +1,32 @@
// RUN: %clang_cc1 -verify -std=c++11 %s
template<typename T> struct complex {
complex(T = T(), T = T());
void operator+=(complex);
T a, b;
};
void std_example() {
complex<double> z;
z = { 1, 2 };
z += { 1, 2 };
// FIXME: implement semantics of scalar init list assignment.
int a, b;
a = b = { 1 }; // unexpected-error {{incompatible type 'void'}}
a = { 1 } = b; // unexpected-error {{incompatible type 'void'}}
}
struct S {
constexpr S(int a, int b) : a(a), b(b) {}
int a, b;
};
struct T {
constexpr int operator=(S s) { return s.a; }
constexpr int operator+=(S s) { return s.b; }
};
static_assert((T() = {4, 9}) == 4, "");
static_assert((T() += {4, 9}) == 9, "");
int k1 = T() = { 1, 2 } = { 3, 4 }; // expected-error {{expected ';'}}
int k2 = T() = { 1, 2 } + 1; // expected-error {{expected ';'}}

View File

@ -45,6 +45,8 @@ int InitList() {
(void)int{}; // expected-warning {{generalized initializer lists are incompatible with C++98}} \
// expected-warning {{scalar initialized from empty initializer list is incompatible with C++98}}
int x { 0 }; // expected-warning {{generalized initializer lists are incompatible with C++98}}
S<int> s = {}; // ok, aggregate
s = {}; // expected-warning {{generalized initializer lists are incompatible with C++98}}
return { 0 }; // expected-warning {{generalized initializer lists are incompatible with C++98}}
}