C++ 错误:constexpr变量“struct2Var”必须由常量表达式初始化
使用Clang编译时,以下程序失败,出现错误:constexpr变量“struct2Var”必须由常量表达式{var,2100433}初始化 . 如果我从var声明中删除_属性_弱,那么它的传递没有任何问题 谁能解释一下这个错误背后的理论/原因吗C++ 错误:constexpr变量“struct2Var”必须由常量表达式初始化,c++,compilation,clang,C++,Compilation,Clang,使用Clang编译时,以下程序失败,出现错误:constexpr变量“struct2Var”必须由常量表达式{var,2100433}初始化 . 如果我从var声明中删除_属性_弱,那么它的传递没有任何问题 谁能解释一下这个错误背后的理论/原因吗 struct myStruct { public: constexpr operator const wchar_t*() const { return &m_cch; } const wchar_t m_cch; }; ex
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}
};
看起来使用_属性_弱会丢弃带有clang的constexpr限定符,但不会丢弃带有gcc的constexpr限定符。尽管clang试图成为gcc的替代品,但它可能以不同的方式实现这种非标准特性。在这种情况下,我想说gcc和clang都没有错
此外,全局constexpr可能很难维护,因为它们都应该在每个翻译单元中统一定义。为了解决这个问题,已将添加到c++17中。看起来使用_属性_弱将丢弃带有clang的constexpr限定符,而不使用gcc。尽管clang试图成为gcc的替代品,但它可能以不同的方式实现这种非标准特性。在这种情况下,我想说gcc和clang都没有错
此外,全局constexpr可能很难维护,因为它们都应该在每个翻译单元中统一定义。为了解决这个问题,已经添加到c++17中。无法复制:这里是复制:您应该将您的问题指向gcc和clang具有不同行为的事实。这是一个重要的细节。简化版:无法复制:这里是复制:你应该回答你的问题,指出gcc和clang有不同的行为。这是一个重要的细节。简化版:看来你是对的。我可能需要确认一下。谢谢肉男提供的大量信息。看来你是对的。我可能需要确认一下。谢谢肉男孩提供的大量信息。