为什么这段代码不能编译?在 lambda 内部重新分配特定类型的结构会导致错误 C2512:没有合适的默认构造函数可用

Foo*_*ble 5 c++ visual-c++ visual-studio-2019

我有一个有 2 个成员的结构,它依赖第一个成员来计算第二个成员的值。

struct SomeStruct
{
   int memberA = 0;
   int memberB = memberA + 5;
};

int main()
{
   auto SomeLambda = []()
   {
      SomeStruct x;
      x = SomeStruct{};
   };

   SomeStruct x;
   x = SomeStruct{};
   return 0;
}

Run Code Online (Sandbox Code Playgroud)

我想重新分配该结构以重新初始化它并重用变量名称。我可以在常规函数中执行此操作,但是如果我在 lambda 中执行此操作,则会出现以下编译错误。

main.cpp(12): error C2512: 'SomeStruct': no appropriate default constructor available
main.cpp(12): note: Invalid aggregate initialization
Run Code Online (Sandbox Code Playgroud)

如果我消除成员之间的相互依赖性,代码可以正常编译。

struct SomeStruct
{
   int memberA = 0;
   int memberB = 5;
};
Run Code Online (Sandbox Code Playgroud)

如果我更改 lambda 内的赋值以使用括号而不是大括号,这也允许代码编译。

SomeStruct x;
x = SomeStruct();
Run Code Online (Sandbox Code Playgroud)

然而 lambda 之外的赋值仍然使用大括号。

谁能告诉我为什么 lambda 内特定类型结构的分配无法在 MSVC 上编译?