aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/cpp2a/desig4.C
blob: 458bd49c3004bec6327b0e0ac3a2c5c179312ef8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// { dg-do compile }
// { dg-options "" }

struct A { int x, y; };
struct B { int y, x; };
void f(A a, int);          // #1
void f(B b, ...);          // #2
void g(A a);               // #3	{ dg-message "candidate 1:" }
void g(B b);               // #4	{ dg-message "candidate 2:" }
void h() {
  f({.x = 1, .y = 2}, 0);  // OK; calls #1
			   // { dg-warning "extended initializer lists only available with" "" { target c++98_only } .-1 }
  f({.y = 2, .x = 1}, 0);  // error: selects #1
			   // { dg-error "designator order for field 'A::x' does not match declaration order in 'A'" "" { target *-*-* } .-1 }
			   // { dg-warning "extended initializer lists only available with" "" { target c++98_only } .-2 }
  g({.x = 1, .y = 2});     // error: ambiguous between #3 and #4
			   // { dg-error "is ambiguous" "" { target *-*-* } .-1 }
			   // { dg-warning "extended initializer lists only available with" "" { target c++98_only } .-2 }
}