g ++抱怨constexpr函数不是常量表达式

时间:2015-04-26 15:31:20

标签: 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

1 个答案:

答案 0 :(得分:0)

I don't know why the original code is bad but here is a workaround:

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