Consider the following code snippet:
struct v : std::variant<int, std::vector<v>> { };
int main()
{
std::visit([](auto){ }, v{0});
}
clang++ 7 with
-stdlib=libc++ -std=c++2a
compiles the code;g++ 9 with
-std=c++2a
fails to compile the code, with the following error:/opt/compiler-explorer/gcc-trunk-20180711/include/c++/9.0.0/variant:94:29: error: incomplete type 'std::variant_size' used in nested name specifier
inline constexpr size_t variant_size_v = variant_size<_Variant>::value; ^~~~~~~~~~~~~~
Are both implementations conforming to the Standard?
If not, what implementation is correct here, and why?