view gcc/testsuite/g++.dg/ext/temp-extend1.C @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
line wrap: on
line source

// 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 ();
}