使用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 (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...