c++ - 使用依赖成员初始化程序进行聚合初始化,在 lambda 中实例化
问题描述
标题几乎与在 Visual Studio 上产生错误的最小代码一样长(在 2017 年和 2019 年测试):
#include <string>
struct Foo
{
std::string a;
std::string b{"prefix_" + a};
};
int main()
{
std::string str{"some string"};
Foo i{str};
[str]()
{
Foo j{str};
};
}
在 GCC 和 Clang 上,两个实例化Foo
都可以(main 本地,lambda 本地)在 Visual Studio 上,lambda 实例化会导致错误:
error C2326: 'auto main::<lambda_a25bbcbd3e2dc2b2209cfbdd50a2113b>::operator ()(void) const': function cannot access 'j'
如果Foo::b
有一个不依赖于 的另一个成员的成员初始化器,Foo
则没有错误。我怀疑这就是错误提到访问j
(读取j.a
到初始化j.b
)的原因。
此行为标准是否符合,或者这是 Visual Studio 前端中的错误?
PS:Godbolt 示例https://godbolt.org/z/68zbYx
解决方案
推荐阅读
- java - Java & Spring,持久化用户定义的过滤器
- mysql - 如何加速 MySQL 计数查询或让它在后台运行
- azure - 如何在 Azure 的逻辑应用中存储从 HTTP 请求返回的 JSON
- batch-file - How to avoid extra blank space on variable value when prompted in Windows cmd batch file
- c# - 获取 sendgrid 动态模板列表
- bash - 锻炼 Bash Track
- android - 如何在 Flutter 中添加 Appbar 操作
- linux - WaitForSingleObject(HANDLE, DWORD) POSIX 调用
- c# - 尝试从 Polar H10 [Bluetooth Low Energy Sample UWP] 获取心率变异性
- javascript - 未捕获的引用错误:
未定义 - InnerHTML