【发布时间】:2018-12-20 21:51:30
【问题描述】:
考虑以下代码sn-p:
struct v : std::variant<int, std::vector<v>> { };
int main()
{
std::visit([](auto){ }, v{0});
}
clang++ 7 和
-stdlib=libc++ -std=c++2a编译代码;-
g++ 9 with
-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; ^~~~~~~~~~~~~~
两种实现都符合标准吗?
如果不是,这里什么实现是正确的,为什么?
【问题讨论】:
标签: c++ language-lawyer c++17 variant