g++编译器报错:constexpr函数不是常量表达式

7
我已将我的问题简化为以下内容:
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

可在coliru上找到复制品。


2
这个?GCC 5.1给我一个ICE错误。 - chris
6
情节变得扑朔迷离…… - orlp
1个回答

1

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接