Ich habe folgende template metaprogramming Umsetzung faktoriellen:Druck statische Variable für Metaprogrammierung
#include <iostream>
template <int n> struct factorial{
static const int res = n*factorial<n-1>::res;
};
template <> struct factorial<0>{
static const int res = 1;
};
int main(){
std::cout << factorial<5>::res << '\n';
return 0;
}
Dieser Code erfolgreich kompiliert und gibt 120, wie erwartet. Aus rein selbstvergnüglichen Gründen möchte ich es stattdessen nicht kompilieren lassen und stattdessen 120 in der Fehlermeldung des Compilers anzeigen.
Gibt es einen einfachen Syntaxfehler, den ich absichtlich in meinen Code eingeben kann, damit er nicht kompiliert wird und trotzdem den Wert 5, d. H. 120, in der Compiler-Fehlermeldung ausgibt?
Ich nehme an, dass die Antwort wahrscheinlich Compiler-abhängig sein wird; Ich verwende derzeit g ++, das mit Xcode Mac OSX geliefert wurde, dessen Oberfläche ein Frontend für den Klang ist.
Wenn Sie erlauben '-Werror', das tut es. http://coliru.stacked-crooked.com/a/34dfcdcb110e9bc4 'static_assert' kann hilfreich sein, wenn das nicht betrügt. –
@BaummitAugen: ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ –
@LightnessRacesinOrbit Nun, ich denke nach [dieser Kommentar] (https://stackoverflow.com/questions/36697980/is-it-possible-initialize-a-vector-mit-steigenden-werten-in-einzeiligen/36698222 # comment60984491_36698222) Ich kann nicht mit "vielleicht nicht nützlich sein für OP ". :) –