view gcc/testsuite/g++.dg/cpp0x/literal-type1.C @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
line wrap: on
line source

// CWG 2096 - constraints on literal unions.
// { dg-do compile { target c++11 } }

struct literal { };
typedef volatile int nonliteral_v;
struct nonliteral {
  nonliteral() {}
};

union U {
  literal l;
  nonliteral n;

  constexpr U() : l{} {}
};

constexpr U u{};

union U2 {
  nonliteral n;
  literal l;

  constexpr U2() : l{} {}
};

constexpr U2 u2{};

union U3 { // { dg-message "not literal" }
  nonliteral_v n; // { dg-message "volatile type" }

  constexpr U3() : n{} {}
};

constexpr U3 u3{}; // { dg-error "not literal" }

union U4 {
  nonliteral n;
  nonliteral_v n2;
  literal l;
  nonliteral n3;

  constexpr U4() : l{} {}
};

constexpr U4 u4{};

union U5 {
  nonliteral_v n;
  literal l;

  constexpr U5() : n{} {}
};

constexpr U5 u5{};