c++ - g++ 提示 constexpr 函数不是常量表达式

标签 c++ g++ constant-expression

我已将我的问题简化为以下内容:

struct A {
    static constexpr std::size_t f() { return 4; }
};

template<std::size_t N>
struct B : A {
    alignas(A::f()) char a[N];
};

我看不出这有什么问题,但是如果我尝试使用 g++ 进行编译:

main.cpp:9:19: error: expression 'A::f' is not a constant-expression
     alignas(A::f()) char a[N];
                   ^
main.cpp:9: confused by earlier errors, bailing out

可以复制on coliru .

最佳答案

我不知道为什么原始代码不好,但这里有一个解决方法:

struct A {
    static constexpr std::size_t f() { return  4; }
};

template<std::size_t ALIGN, std::size_t N>
struct C {
    alignas(ALIGN) char a[N];
};

template<std::size_t N>
struct B : A, C<A::f(), N> {
};

关于c++ - g++ 提示 constexpr 函数不是常量表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29879609/

相关文章:

scala - 我可以在 Scala 中有一个负值作为常量表达式吗?

c++ - 在没有初始化的情况下在 header 中声明符号常量?

c++ - 按字符数拆分字符串的 spirit 语法

c++ - 在 SciTE 中链接 C++

qt - 将 -std=gnu++11 编译器标志添加到 QMake

c++ - 为什么 std::chrono 在测量 OpenMP 并行化 for 循环和编译器优化的执行时间时不起作用?

c++ - N4140 的要点 §5.19/2.3 中的单词 "undefined"是什么意思?

c++ - 无法隐式初始化 std::function

c++ - 使用QScriptEngine计算计算

c++ - GCC 与 Clang 中的 Stack Smashing(可能是由于金丝雀)