G++抱怨constexpr函数不是一个常量表达式
g++ complains constexpr function is not a 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
在大肠杆菌上可复制。
我不知道
为什么原始代码不好,但这里有一个解决方法:
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++中的一个变量定义一个常量
- 从另一个常量标准::映射初始化一个常量标准::映射的一部分
- isdigit() 和 isalnum() 给出错误,因为输入是一个常量字符并且无法转换。其他可能查看输入是否为数字的方法?
- C++ 在 none 常量指针函数中返回一个常量指针
- 为什么重载"<<"需要一个常量参数?
- 为什么它是一个常量指针而不是指向常量指针
- 是一个常量句柄真的常量
- 将一个常量cstring附加到我自己的String类对象
- C++在类构造函数中定义了一个常量成员变量
- G++抱怨constexpr函数不是一个常量表达式
- 是一个常量字符串Still Preferrable
- 返回一个常量字符 *
- 将一个常量未签名的长流流式传输到流
- 从自定义 printf 函数返回一个常量字符*
- C++做虚函数总是必须是一个常量
- 我想将一个常量字符串写入包含另一个输入数据块的文件
- 如何计算初始化一个常量数组(制作常量查找表)
- C++:在初始化列表中传递一个常量 *p
- 我可以在 protobuf 中定义一个常量字符串吗?
- 初始化一个常量变量,如果失败则断言(c++)