Очищаются ли значения предыдущего варианта, когда этому варианту присваивается новое значение?
std::variant<std::string, std::vector<int>> v;
v = std::string("foo");
v = std::vector<int>(); // is string's destructor called above?
Я предполагаю, что предыдущие значения для контейнеров автоматически освобождаются при установке новых значений в вариант.