階乗は、コンパイラによって生成されたメッセージに次のように出力できます。
template<int x> struct _;
int main() {
_<Factorial<10>::value> __;
return 0;
}
エラーメッセージ:
prog.cpp:14:32:エラー:集計'_ <3628800> __'の型が不完全であり、定義できません_ :: value> __; ^
これがの階乗3628800
です10
。
ideoneでご覧ください:http://ideone.com/094SJz
それで、あなたはこれを探していますか?
編集:
Matthieuは、階乗を印刷し、コンパイルを続行するための巧妙なトリックを求めました。これが1つの試みです。エラーは発生しないため、コンパイルは1つの警告で成功します。
template<int factorial>
struct _{ operator char() { return factorial + 256; } }; //always overflow
int main() {
char(_<Factorial<5>::value>());
return 0;
}
この警告でコンパイルされます:
main.cpp:'_ :: operator char()[with int factorial = 120]'のインスタンス化:main.cpp:16:39:ここから必須main.cpp:13:48:警告:暗黙の定数変換でオーバーフロー[-Woverflow] struct _ {operator char(){階乗+256を返す; }}; //常にオーバーフロー
これがの階乗120
です5
。
ideoneでのデモ:http://coliru.stacked-crooked.com/a/c4d703a670060545
素敵なマクロを書いて、代わりに次のように使用することができます。
#define PRINT_AS_WARNING(constant) char(_<constant>())
int main()
{
PRINT_AS_WARNING(Factorial<5>::value);
return 0;
}
それは素晴らしく見えます。