Am 13.11.19 um 13:47 schrieb Jonathan Wakely: > On Wed, 13 Nov 2019 at 11:43, Klaus Doldinger > <klaus.doldinger64@xxxxxxxxx> wrote: >> >> >> >> Am 13.11.19 um 11:35 schrieb Jonathan Wakely: >>> On Wed, 13 Nov 2019 at 09:24, Klaus Doldinger >>> <klaus.doldinger64@xxxxxxxxx> wrote: >>>> >>>> Hi all, >>>> >>>> in the follwing example >>>> >>>> #include <compare> // omitting trigger ICE >>>> >>>> template<auto V> >>>> struct A {}; >>>> >>>> struct B { >>>> inline constexpr auto operator<=>(const B& rhs) const = default; >>>> private: >>>> int value; // why must this member be public? >>>> }; >>>> >>>> int main() { >>>> A<B{}> t; >>>> } >>>> >>>> why must the member value be public? >>> >>> Looks like a bug, please report it to bugzilla. >> Ok, we found this not to be a bug. But, how do I write a class to use as NTTP with private members? I'm a bit confused about: https://en.cppreference.com/w/cpp/language/template_parameters Here string structural equality does not require all public members. It must be literal and the members must be structural revursively.