[solved] static_assert( .. ) - Wparentheses mit 'fold expression'



  • Hallo Forum,

    ich habe aktuell das Problem, dass ich mit einer static_assertion prüfen möchte, ob die eingegebenen Nummern kleiner als eine bestimmte Nummer sind. Dazu habe ich das ganze wie folgt angelegt:

    template<typename MCU>
    struct ExternalInterrupts
    {
        ExternalInterrupt() = delete;
    
        // ...
        template<ExternalInterruptBits::Enable... Number>
        inline static void enable()
        {
            static_assert(((static_cast<uint8_t>(Number) <= MCU::ExtIntCount) & ...), "No such interrupt available."); 
            // ...
        }
    };
    

    Das ganze Funktioniert auch, jedoch habe ich das Problem, dass mir immer eine Warning ausgegeben wird:

    warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
        static_assert(((static_cast<uint8_t>(Number) <= MCU::ExtIntCount) & ...),
                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
    
    

    Gibt es denn hier eine Möglichkeit, die Warnung sinnvol zu beheben oder ist das ganze hier ein Compiler internes Problem, in der Art, wie er den Faltungsausdruck auflöst? Bisher habe ich hierzu noch nichts gefunden.

    Vielen Dank für eure Antworten!

    Edit - Solution:

    Nach Ersetzen des Bitoperators durch einen logischen Operator (& -> &&) ist die Warnung verschwunden.

    Viele Grüße,
    Smokehead


  • Mod

    Darf man fragen, weshalb du bitweises statt logisches Und einsetzt?

    Nichtsdestotrotz ist die Warnung unangebracht, da der Operand offensichtlich bereits umklammert ist. Kannst ja fuer deinen Compiler einen entsprechenden bug report veröffentlichen.



  • @Columbo

    Das ist eine berechtigte Frage.. Ich nehme an, das war einfach ein "Copy-Paste"-Fehler, da ich an anderer Stelle mit Hilfe von Faltungsausdrücken Register bitweise Setze. Das positive daran ist, sobald ich den Bit-Operator durch den logischen Operator ersetze, ist die Warnung verschwunden. Danke für die schnelle Antwort! 🙂


Anmelden zum Antworten