// PR c++/100209 // { dg-do compile { target c++14 } } template struct __a_t { unsigned char A = 0; constexpr Derived & SetA(const unsigned char & value) { A = value; return *static_cast(this); } }; template struct __b_t { unsigned char B = 0; constexpr Derived & SetB(const unsigned char & value) { B = value; return *static_cast(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, "");