阶乘可以在编译器生成的消息中打印为:
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 要求一个聪明的技巧来打印阶乘并让编译继续。这是一种尝试。它没有给出任何错误,因此编译成功并发出一个警告。
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() { return factorial + 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;
}
看起来很棒。