[Development] C++20 structural types (was: C++20 @ Qt)

Marc Mutz marc.mutz at qt.io
Sat Nov 5 08:24:29 CET 2022


Hi Thiago,

On 04.11.22 16:49, Thiago Macieira wrote:
> I've just hit this: should we make some of our very simple types even simpler
> so they're structural types[1] and thus can be passed as template parameters?
> 
> For example, QFlags. I've just tried it and I get:
> 
> error: ‘QFlags<Qt::AlignmentFlag>’ is not a valid type for a template non-type
> parameter because it is not structural
> note: ‘QFlags<Qt::AlignmentFlag>::i’ is not public
> 
> [1] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0732r2.pdf

I wrote about this in the comparison sub-thread:

On 03.11.22 10:40, Marc Mutz via Development wrote:
 > One can even now = default the equality operator. Then the compiler
 > creates one based on for member-wise equality. If all such members have
 > an = default'ed equality operator, and with a few other other
 > requirements, the type in question has Strong Structural Equality, and
 > thus can be used as arguments to non-type template parameters (NTTP).
 > QFlags and QFixed are examples where this might come in handy. There are
 > probably others, too.

There's also https://bugreports.qt.io/browse/QTBUG-94266

I'll clone that for QFixed.

Thanks,
Marc



More information about the Development mailing list