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 上复制

4

1 回答 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> {
};
于 2015-04-27T13:15:45.760 回答