相关疑难解决方法(0)

在继承自std :: variant的类上使用std :: visit - libstdc ++ vs libc ++

请考虑以下代码段:

struct v : std::variant<int, std::vector<v>> { };

int main()
{
    std::visit([](auto){ }, v{0});
}
Run Code Online (Sandbox Code Playgroud)
  • clang ++ 7用-stdlib=libc++ -std=c++2a编译代码;

  • g ++ 9 -std=c++2a无法编译代码,出现以下错误:

    /opt/compiler-explorer/gcc-trunk-20180711/include/c++/9.0.0/variant:94:29:错误:嵌套名称说明符中使用的不完整类型'std :: variant_size'

     inline constexpr size_t variant_size_v = variant_size<_Variant>::value;
    
                             ^~~~~~~~~~~~~~
    
    Run Code Online (Sandbox Code Playgroud)

godbolt.org上的实例


  • 两种实现都符合标准吗?

  • 如果没有,这里的实施是正确的,为什么?

c++ variant language-lawyer c++17

19
推荐指数
2
解决办法
1166
查看次数

标签 统计

c++ ×1

c++17 ×1

language-lawyer ×1

variant ×1