(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.dg/
cpp1y/
constexpr-base1.C
// PR c++/100209
// { dg-do compile { target c++14 } }

template<typename Derived>
struct __a_t
{
  unsigned char A = 0;
  constexpr Derived & SetA(const unsigned char & value) {
    A = value;
    return *static_cast<Derived *>(this);
  }
};

template<typename Derived>
struct __b_t
{
  unsigned char B = 0;
  constexpr Derived & SetB(const unsigned char & value) {
    B = value;
    return *static_cast<Derived *>(this);
  }
};

struct __ab_t : __a_t<__ab_t>, __b_t<__ab_t> { };

constexpr auto AB = __ab_t().SetA(100).SetB(10);
static_assert(AB.A == 100, "");
static_assert(AB.B == 10, "");