Рассмотрим следующий фрагмент кода:
struct v : std::variant<int, std::vector<v>> { };
int main()
{
std::visit([](auto){ }, v{0});
}
-
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; ^~~~~~~~~~~~~~
-
Соответствуют ли обе реализации Стандарту?
-
Если нет, то какая реализация верна здесь и почему?