145
|
1 // PR c++/92831
|
|
2 // { dg-do run { target c++11 } }
|
|
3 // { dg-options "" }
|
|
4
|
|
5 template<typename T> using id = T;
|
|
6 struct S { S () : s (false) { ++c; } S (bool x) : s (x) { ++c; } ~S () { --c; }; bool s; static int c; };
|
|
7 int S::c = 0;
|
|
8
|
|
9 void
|
|
10 foo (int i)
|
|
11 {
|
|
12 const bool&& a
|
|
13 = id<S[3]>{false, true, false}[i].s
|
|
14 ? id<S[2]>{true, false}[i].s : id<S[4]>{true, false, true, false}[i].s;
|
|
15 if (S::c != (i ? 2 : 4))
|
|
16 __builtin_abort ();
|
|
17 }
|
|
18
|
|
19 void
|
|
20 baz (int i)
|
|
21 {
|
|
22 const bool&& a = id<S[3]>{false, true, false}[i].s
|
|
23 ? : id<S[4]>{true, false, true, false}[i].s;
|
|
24 if (S::c != (i ? 0 : 4))
|
|
25 __builtin_abort ();
|
|
26 }
|
|
27
|
|
28 int
|
|
29 main ()
|
|
30 {
|
|
31 foo (0);
|
|
32 if (S::c != 0)
|
|
33 __builtin_abort ();
|
|
34 foo (1);
|
|
35 if (S::c != 0)
|
|
36 __builtin_abort ();
|
|
37 baz (0);
|
|
38 if (S::c != 0)
|
|
39 __builtin_abort ();
|
|
40 baz (1);
|
|
41 if (S::c != 0)
|
|
42 __builtin_abort ();
|
|
43 }
|