Wie funktioniert CTAssert
-
Hallo,
bin gerade dabei mir das Buch "Modern C++ Design"
von Andrei Alexandrescu zu gemüte zu führen.Auf jeden Fall ist da im Vorwort das folgende Template
aufgeführt, das als ziehmlich genial beschrieben wird:template<bool> struct CTAssert; template<> struct CTAssert<true> {};Irgendwie kapiere ich die Konstruktion nicht.
Laut Buch erfolgt eine Spezialisierung auf true,
aber nicht auf false.
Vielleicht kann mir da jemand von euch nen Tip
geben wie dieser Konstrukt funktioniert.Gruss vom grübelnden Ulli
-
Guck mal: Was passiert denn, wenn du das versuchst?
class A; A object;Das selbe wie hier:
template <bool> struct static_assertion; template <> struct static_assertion<true> { } static_assertion<5 == 7> assertion;
-
Der Compiler beschwert sich, weil keine Spezialisierung für
falseexistiert und das Template für allgemeinebools nicht definiert ist.
-
CUlli schrieb:
Irgendwie kapiere ich die Konstruktion nicht.
Laut Buch erfolgt eine Spezialisierung auf true,
aber nicht auf false.
Genau darin besteht der ganze Trick. Wenn du versuchst, das Template mit
falsezu instantiieren, wird keine passende Spezialisierung gefunden (und das allgemeine Template ist nicht definiert). Deshalb muss der Compiler eine Fehlermeldung ausgeben. Wenn darin der Namestatic_assertionvorkommt, sollte schon recht gut ersichtlich sein, dass eine Compilezeit-Assertion fehlgeschlagen ist. Dennoch kann es manchmal nützlich sein, noch mehr Informationen in die Fehlermeldung zu packen, Alexandrescu wird darauf noch eingehen.
-
Vielen Dank für eure Hilfe

Jetzt versteh ich das ganze schon besser !
Und nun kapier ich auch warum er schreibt,
dass das was fehlt genauso wichtig
ist wie das was dasteht.
Nochmals vielen Dank an alle,Gruss Ulli