【发布时间】:2020-01-07 13:50:40
【问题描述】:
以下程序在使用 Clang 编译时失败,错误:constexpr variable 'struct2Var' must be initialized by an constant expression {var, 2100433} .
如果我从“var”声明中删除__attribute__((weak)),它会毫无问题地通过。
谁能解释一下这个错误背后的理论/原因。
struct myStruct
{
public:
constexpr operator const wchar_t*() const
{
return &m_cch;
}
const wchar_t m_cch;
};
extern __attribute__((weak)) const constexpr myStruct var {'a'};
struct myStruct2
{
const wchar_t* stzKey = nullptr;
int intvar = 0;
};
static constexpr const myStruct2 struct2Var[1]
{
{var, 2100433}
};
【问题讨论】:
-
这里是复制品:godbolt.org/z/b3W9ka
-
您应该edit 您的问题指出 gcc 和 clang 具有不同行为的事实。这是一个重要的细节。
标签: c++ compilation clang