问题描述
标题几乎与在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 (将#修改为@)