在聚合的“std::initializer_list”初始化中省略嵌套大括号是否合法?

2024-01-01

考虑以下代码:

run on gcc.godbolt.org https://godbolt.org/#g:!((g:!((g:!((h:codeEditor,i:(filename:%271%27,fontScale:14,fontUsePx:%270%27,j:1,lang:c%2B%2B,selection:(endColumn:1,endLineNumber:12,positionColumn:1,positionLineNumber:1,selectionStartColumn:1,selectionStartLineNumber:12,startColumn:1,startLineNumber:1),source:%27%23include+%3Cinitializer_list%3E%0A%0Astruct+A%0A%7B%0A++++int+x%3B%0A%7D%3B%0A%0Aint+main()%0A%7B%0A++++std::initializer_list%3CA%3E%7B100%7D%3B%0A%7D%0A%27),l:%275%27,n:%270%27,o:%27C%2B%2B+source+%231%27,t:%270%27)),k:50,l:%274%27,n:%270%27,o:%27%27,s:0,t:%270%27),(g:!((h:conformance,i:(compilers:!((compilerId:g112,options:%27-std%3Dc%2B%2B20+-Wall+-Wextra+-pedantic-errors%27),(compilerId:clang1300,options:%27-std%3Dc%2B%2B20+-Wall+-Wextra+-pedantic-errors%27),(compilerId:clang1300,options:%27-std%3Dc%2B%2B20+-Wall+-Wextra+-pedantic-errors+-stdlib%3Dlibc%2B%2B%27),(compilerId:vcpp_v19_latest_x64,options:%27%27),(compilerId:vcpp_v19_latest_x64,options:%27/std:c%2B%2Blatest%27)),editorid:1,langId:c%2B%2B,libs:!()),l:%275%27,n:%270%27,o:%27Conformance+Viewer+(Editor+%231)+5/10%27,t:%270%27)),header:(),k:50,l:%274%27,n:%270%27,o:%27%27,s:0,t:%270%27)),l:%272%27,n:%270%27,o:%27%27,t:%270%27)),version:4

#include <initializer_list>

struct A
{
    int x;
};

int main()
{
    std::initializer_list<A>{100};
}

铿锵接受了。 GCC 和 MSVC 拒绝它,并出现如下错误:

error: no matching function for call to 'std::initializer_list<A>::initializer_list(<brace-enclosed initializer list>)'

这里哪个编译器是正确的?

我试着看看[dcl.init.list]/5 http://eel.is/c++draft/dcl.init.list#5 and [over.match.list] http://eel.is/c++draft/over.match.list,但没有发现什么有趣的事情。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在聚合的“std::initializer_list”初始化中省略嵌套大括号是否合法? 的相关文章

随机推荐