【发布时间】:2016-04-24 00:17:09
【问题描述】:
我有以下template metaprogramming 的阶乘实现:
#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;
}
此代码编译成功并按预期输出 120。但是,纯粹出于自娱自乐的原因,我想改为让它不编译,而是在编译器的错误消息中显示120。
是否有一个简单的语法错误,我可以故意输入我的代码使其无法编译,但仍会在编译器错误消息中打印 5!,即 120?
我预计答案可能取决于编译器;我目前正在使用 Xcode Mac OSX 附带的 g++,iirc 是 clang 的前端。
【问题讨论】:
-
如果你允许
-Werror,就可以了。 coliru.stacked-crooked.com/a/34dfcdcb110e9bc4static_assert如果这不是作弊,可能会有所帮助。 -
@BaummitAugen: ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
-
@LightnessRacesinOrbit 好吧,我想在this comment 之后,我无法完全摆脱“可能对 OP 没有用”。 :)
标签: c++ compiler-errors template-meta-programming static-variables