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;
^~~~~~~~~~~~~~
live example on godbolt.org
Are both implementations conforming to the Standard?
If not, what implementation is correct here, and why?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…