相关疑难解决方法(0)

constexpr函数参数作为模板参数

我正在玩一些使用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;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用GCC 4.8.1并且输出为:
'x'不是模板参数中的常量表达式,用于'int'类型
'y'不是类型'int'的模板参数中的常量表达式

我试图计算的两种方式之间究竟有什么区别add::ret?这两个值都应该在编译时可用.

c++ constexpr c++11

22
推荐指数
4
解决办法
1万
查看次数

标签 统计

c++ ×1

c++11 ×1

constexpr ×1