如何解决使用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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。