![](/img/trans.png)
[英]std::variant requires default constructor in gcc 8 and 9, and not require in gcc 10/clang
[英]Befriend default constructor: clang produces parse error while gcc did not
我遇到了一个令人困惑的问题。 对于以下代码段:
class A { };
class E
{
friend A::A() throw();
};
我使用Clang 6编译了此代码示例,并得到“错误:constexpr声明之后是'A'的非constexpr声明”。 我也尝试了clang 4.0,clang 5.0和gcc 5.4,并且没有这种错误。 这是Clang6中的错误吗?
隐式定义的默认构造函数是constexpr
由于class A
没有用户声明的构造函数,因此将不带参数的非显式构造函数隐式声明为默认值
然而,
friend A::A() throw();
您显式声明A::A()
与隐式声明的构造函数(这是constexpr constructor
)不匹配。
特别:
它的功能体应为默认值,或者其功能体的复合声明应满足constexpr函数的功能体的要求;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.