我正在玩一些玩具代码,使用c 11来更多地了解事情的工作原理.在此期间,我遇到了以下问题,简化为:
template <int x,int y> class add { public: static constexpr int ret = x + y; }; constexpr int addFunc(const int x,const int y) { return add<x,y>::ret; } int main() { const int x = 1; const int y = 2; cout << add<x,y>::ret << endl; // Works cout << addFunc(1,2) << endl; // Compiler error return 0; }
我使用GCC 4.8.1,输出是:
‘x’不是类型为’int’的模板参数中的常量表达式
‘y’在类型’int’的模板参数中不是一个常量表达式
我试图计算add :: ret的两种方式之间的区别究竟是什么?这两个值都应该在编译时可用.