G++抱怨constexpr函数不是一个常量表达式

g++ complains constexpr function is not a constant expression

本文关键字:一个 常量 表达式 constexpr 抱怨 函数 G++      更新时间:2023-10-16

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

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

在大肠杆菌上可复制。

我不知道

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

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> {
};