Hi,

thanks for your elaboration!
I'll make myself a reminder to file to bugs (if the new Jira allows me to do 
that...), one for the QT_TYPESAFE_ENUM and one for the missing convertion to 
int.

My usecase is like this example https://godbolt.org/z/Y7Yaefvor
I want to know whether a specific flag is set, and return the result as 'bool' 
from a function, like so:

bool isAskingWhen(Question q)
{
    return {q & QuestionFlag::When};
}

As you can see in the CE link, this produces a "narrowing" warning, which I 
want to avoid.

I guess the proper solution would be

return ((q & QuestionFlag::When) != 0);

...or is there some better option?

Have a great day!

Robert

> -----Original Message-----
> From: Interest <[email protected]> On Behalf Of Giuseppe
> D'Angelo via Interest
> Sent: Sunday, 22 February 2026 22:18
> To: [email protected]
> Subject: Re: [Interest] QFlags: Typesafe way to check "any flag set"
>
> CAUTION: External Sender
> Stop. Review. Verify! Were you expecting this mail?
> If you were not expecting this email, confirm with the sender through a
> trusted channel (e.g., phone or Teams).
> If suspicious, please report the mail, do not click on any links or open
> attachments, and do not enter any ID or password.
>
>
>
> Hi,
>
> Il 19/02/26 08:31, Schimkowitsch Robert ha scritto:
> > Hi Guiseppe,
> >
> > thanks for the reply!
> >
> > QT_TYPESAFE_FLAGS features prominently in the Qt documentation, see
> > e.g
> > https://doc/.
> > qt.io%2Fqt-6%2Fqflags.html%23operator-and-
> eq&data=05%7C02%7Crobert.sch
> >
> imkowitsch%40andritz.com%7Ca09bda655ebc4cffb8dc08de72581984%7C678
> 5298f
> >
> e857464b9b4b807178402632%7C1%7C0%7C639073919876105010%7CUnkno
> wn%7CTWFp
> >
> bGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4z
> MiIsIk
> >
> FOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=NBL6HbErIfvoP
> VY7Vxq%
> > 2BOLxnDEczqQBHD9YHKXm9rVI%3D&reserved=0
>
> I think that's a mistake, as QT_TYPESAFE_FLAGS itself is never documented...
>
> > What I found confusing is that operator!() is documented, but operator
> bool() is not. Also, the implicit conversion to int is not documented (at 
> least I
> could not find it in the above page).
>
> That's also a mistake. Would you mind filing a QTBUG for documentation?
>
> > There is "toInt()", but then I'd have to explicitly write
> >
> > if (flags.toInt())
> >     // something
> >
> > I noticed that I can apparently static_cast flags to bool, but if I want to 
> > return
> a bool from a function, I have to use the explicit cast (which would be fine, 
> if
> that is the way it's supposed to work).
>
> Going back to:
>
> > #ifdef QT_TYPESAFE_FLAGS
> >     constexpr inline explicit operator Int() const noexcept { return i; }
> >     constexpr inline explicit operator bool() const noexcept { return
> > i; } #else
> >     constexpr inline Q_IMPLICIT operator Int() const noexcept { return i; }
> >     constexpr inline bool operator!() const noexcept { return !i; }
> > #endif
>
> if QT_TYPESAFE_FLAGS is not defined (the default), then a QFlags object will
> implicitly convert to bool through the operator Int(), including on function
> return:
>
> https://gcc.god/
> bolt.org%2Fz%2FoPjhM661G&data=05%7C02%7Crobert.schimkowitsch%40an
> dritz.com%7Ca09bda655ebc4cffb8dc08de72581984%7C6785298fe857464b9b
> 4b807178402632%7C1%7C0%7C639073919876130763%7CUnknown%7CTWF
> pbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4
> zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=as1f8Xa
> 5IHoi1Jveknr0IUn0IvismBvsOSjbvBT5VR4%3D&reserved=0
>
>
> If instead it is defined (not recommended), then you can still test them using
> `if (flags)`, but you need an explicit cast when using `return` or similar 
> forms
> of copy initializations, because the operator towards bool becomes `explicit`.
> This is a somewhat annoying quirk of C++ that may cause source
> incompatibilities (cf.
> https://codere/
> view.qt-
> project.org%2Fc%2Fqt%2Fqtbase%2F%2B%2F311100&data=05%7C02%7Crob
> ert.schimkowitsch%40andritz.com%7Ca09bda655ebc4cffb8dc08de72581984
> %7C6785298fe857464b9b4b807178402632%7C1%7C0%7C6390739198761487
> 05%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjA
> uMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C
> %7C%7C&sdata=sy3z4wL12FyIzfNsthVEpc5x%2Bx7KtqlNdztN7QErfGc%3D&re
> served=0 )
>
> For example,
>
> // under QT_TYPESAFE_FLAGS
> QFlags<E> flags;
>
> bool f() {
>    bool ok = flags;   // ERROR
>    bool ok { flags }; // OK
>    if (flags) {}      // OK
>    return flags;      // ERROR
>    return bool(flags); // OK ; or (bool)flags, static_cast<bool>(flags), etc.
> }
>
>
>
> HTH,
>
>
> --
> Giuseppe D'Angelo | [email protected] | Senior Software
> Engineer KDAB (France) S.A.S., a KDAB Group company Tel. France +33 (0)4 90
> 84 08 53,
> http://www.kd/
> ab.com%2F&data=05%7C02%7Crobert.schimkowitsch%40andritz.com%7Ca0
> 9bda655ebc4cffb8dc08de72581984%7C6785298fe857464b9b4b80717840263
> 2%7C1%7C0%7C639073919876165597%7CUnknown%7CTWFpbGZsb3d8eyJF
> bXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiT
> WFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=D9e55vakiHcr6TZV0CR
> oKV10mD7HIalN%2BmBq11vXJZU%3D&reserved=0
> KDAB - Trusted Software Excellence
________________________________

This message and any attachments are solely for the use of the intended 
recipients. They may contain privileged and/or confidential information or 
other information protected from disclosure. If you are not an intended 
recipient, you are hereby notified that you received this email in error and 
that any review, dissemination, distribution or copying of this email and any 
attachment is strictly prohibited. If you have received this email in error, 
please contact the sender and delete the message and any attachment from your 
system.

ANDRITZ HYDRO GmbH


Rechtsform/ Legal form: Gesellschaft mit beschränkter Haftung / Corporation

Firmensitz/ Registered seat: Wien

Firmenbuchgericht/ Court of registry: Handelsgericht Wien

Firmenbuchnummer/ Company registration: FN 61833 g

DVR: 0605077

UID-Nr.: ATU14756806


Thank You
________________________________
_______________________________________________
Interest mailing list
[email protected]
https://lists.qt-project.org/listinfo/interest

Reply via email to