为什么具有默认参数std::initializer_list的ctor不可用(VS2019)



我不太明白为什么这段代码不能在Visual Studio 2019(16.8.3(上编译:

#include <initializer_list>
struct Foo
{
Foo(std::initializer_list<int> = {});
};
int main()
{
Foo f;
}
Foo::Foo(std::initializer_list<int>) {}

它给了我这个错误:

C2512:";Foo":没有合适的默认构造函数可用

这是编译器错误还是我在这里遗漏了什么?注意,我已经检查过了,这确实是在GCC 10.1 上编译的

如果您将构造函数的正向声明更改为即时定义,则代码编译时不会出错:

#include <initializer_list>
struct Foo
{
Foo(std::initializer_list<int> = {}) {}
};
int main()
{
Foo f;
}

这里有一个编译器错误

它不应该因为构造函数的定义在同一翻译单元中不可用而导致编译失败(在另一个翻译单元中提供它,甚至在main下提供它,都不允许构建程序(。

如果将std::initializer_list替换为int,则一切都会按预期进行。

我已向Microsoft报告了此问题(将在可用时添加链接(

最新更新