blob: aaef115494c45c8cc45d1129e065e96d04ab26af [file] [log] [blame]
// PR c++/92831
// { dg-do run { target c++11 } }
// { dg-options "" }
template<typename T> using id = T;
struct S { S () : s (false) { ++c; } S (bool x) : s (x) { ++c; } ~S () { --c; }; bool s; static int c; };
int S::c = 0;
void
foo (int i)
{
const bool&& a
= id<S[3]>{false, true, false}[i].s
? id<S[2]>{true, false}[i].s : id<S[4]>{true, false, true, false}[i].s;
if (S::c != (i ? 2 : 4))
__builtin_abort ();
}
void
baz (int i)
{
const bool&& a = id<S[3]>{false, true, false}[i].s
? : id<S[4]>{true, false, true, false}[i].s;
if (S::c != (i ? 0 : 4))
__builtin_abort ();
}
int
main ()
{
foo (0);
if (S::c != 0)
__builtin_abort ();
foo (1);
if (S::c != 0)
__builtin_abort ();
baz (0);
if (S::c != 0)
__builtin_abort ();
baz (1);
if (S::c != 0)
__builtin_abort ();
}