BOOST_STATIC_ASSERT_MSG



  • Hallo,

    ich verstehe nicht wie man den Befehl: "BOOST_STATIC_ASSERT_MSG" nutzen soll.

    Ich habe folgenden Code

    #include <boost/static_assert.hpp>
    ...
    bool myfunc()
    {
    ...
    if( ! kondition )
    {
      BOOST_STATIC_ASSERT_MSG(false,"Could not ...");
      return false;
    }
    ...
    }
    

    Mein VS2008 Compiler bringt folgendes:

    1>a.cpp(54) : error C2975: 'x' : invalid template argument for 'boost::STATIC_ASSERTION_FAILURE', expected compile-time constant expression
    1>        C:\boost\boost_1_47_0\boost/static_assert.hpp(54) : see declaration of 'x'
    1>a.cpp(54) : error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>'
    1>        with
    1>        [
    1>            x=false
    1>        ]
    

    Was mache ich falsch?



  • Kann vielleicht jemand mal versuchen diesen Fehler zu reproduzieren?



  • Funktioniert doch.

    Lies einfach nach, was BOOST_STATIC_ASSERT/_MSG tut.

    Was du vielleicht suchst, ist assert aus <cassert> .



  • TyRoXx schrieb:

    Funktioniert doch.

    Lies einfach nach, was BOOST_STATIC_ASSERT/_MSG tut.

    Was du vielleicht suchst, ist assert aus <cassert> .

    Hmm ich dachte eigentlich dass wäre C++ (assert). Assert selber ist ja noch auc C Libraries..



  • Das "static" will dir etwas sagen 😉 Die Bedingung wird bereits zur Compilezeit ausgewertet. Wenn sie false ergibt, wird ein Compilerfehler generiert.



  • Michael E. schrieb:

    Das "static" will dir etwas sagen 😉 Die Bedingung wird bereits zur Compilezeit ausgewertet. Wenn sie false ergibt, wird ein Compilerfehler generiert.

    Jetzt sehe ich ein dass ich doof war. Gibt es ein ähnliches Ding für C++? Sollte man asserts nutzen? Ich finde sie vor allem in der Entwicklungsphase ganz praktisch zumal es im Release Modus nicht behindert.



  • Klar, du kannst das assert aus <cassert> benutzen. Nicht alles, was von C kommt, ist böse 😉



  • Michael E. schrieb:

    Klar, du kannst das assert aus <cassert> benutzen. Nicht alles, was von C kommt, ist böse 😉

    Puh... ich dachte schon man schimpft mich wieder als JW. Nochmal heil davongekommen...

    Danke an die Helfenden!



  • Wenn du Boost willst, kannst du auch BOOST_ASSERT_MSG verwenden. Soll etwas mächtiger als das normale assert sein, aber ehrlich gesagt habe ich die Features nie benötigt.



  • sdasdasd schrieb:

    if( ! kondition )
    

    ohjeh
    http://de.wikipedia.org/wiki/Kondition



  • In der angegeben Form macht assert aber nicht so richtig viel Sinn. Wenn ich da nicht etwas böse falsch verstehe, willst du da im Release-Modus in irgendeiner Form weitermachen, während die Debug-Binaries einfach abstürzen, und es ist eine ausgesprochen heikle Angelegenheit, für Debug- und Release-Modi verschiedene Verhaltensweisen vorzusehen. assert(bedingung); ist zu verstehen als "Ich behaupte, dass diese Bedingung immer gilt. Wenn das nicht der Fall ist, ist etwas richtig fies kaputt und nichts mehr zu retten." Wenn du weitermachen kannst, obwohl die Bedingung nicht erfüllt ist, wäre es angebrachter, den Fehler in eine Logdatei, syslog o.ä. zu schreiben.


Anmelden zum Antworten