blob: 3c93aa851f349210655c261862972d1987e451d6 [file] [log] [blame]
// 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, "");