作者:空念 | 来源:互联网 | 2022-12-07 05:35
1> M.M..:
我认为这段代码是正确的,应该被接受; gcc和clang在谨慎方面犯错,以避免核心问题1397的缺陷.
如果NSDMI(非静态数据成员初始值设定项)导致生成类的默认默认构造函数,那么该问题就会导致程序格式不正确.
但是,您的代码不会这样做.NSDMI只是一个整数字面值.提示此问题的示例有类似的代码int a = ( (sa(), 123) );
我猜可能会发生的事情是:该标准还说,在处理NSDMI时,该类sa
应该被视为完整的.因此,编译器可能会推迟NSDMI处理,直到sa
达到结束括号为止; 然后标记错误因为inline static sb b;
会生成sb::sb()
.
可能标准仍然有缺陷,直到现在还没有人想到你的例子.
作为一种解决方法,您可以明确地提供麻烦的构造函数:
struct sb { int a = 123; sb() {} };