I'm working on someone else's (C++20) codebase using Clion and the IDE is giving me this error (although the code itself is compiling and runnable using g++12):
In template: attempt to use a deleted function error occurred here in instantiation of function template specialization 'std::__detail::__variant::_Variant_storage<false, std::vector<int>, std::vector<std::basic_string<char>>>::_Variant_storage<0UL,
std::vector<int>>' requested here
in instantiation of function template specialization 'std::__detail::__variant::_Variant_base<std::vector<int>,
std::vector<std::basic_string<char>>>::_Variant_base<0UL, std::vector<int>>' requested here
in instantiation of function template specialization 'std::variant<std::vector<int>, std::vector<std::basic_string<char>>>::variant<0UL, std::vector<int>, std::vector<int>, void>' requested here
in instantiation of function template specialization 'std::variant<std::vector<int>,std::vector<std::basic_string<char>>>::variant<std::vector<int>, void, void, std::vector<int>, void>' requested here
explicitly defaulted function was implicitly deleted here destructor of '_Variadic_union<std::vector<int>,
std::vector<std::basic_string<char>>>' is implicitly deleted because variant field '_M_first' has a non-trivial destructor
I've tried to reproduce a minimal example that causes this; the situation is essentially the following:
#include <vector>
#include <string>
#include <variant>
using namespace std;
using IntTuples = vector<int>;
using StringTuples = vector<string>;
using ExtensionalTuples = variant<IntTuples, StringTuples>;
void do_something_with_extensional_tuples(ExtensionalTuples&& tuples) {
// bla
}
int main() {
IntTuples my_tuples{};
do_something_with_extensional_tuples(move(my_tuples));
}
I thought that this should work, similar things seem to have worked in other places. So can anyone help me understand the error? Is it to do with a discrepancy between C++20 and C++17?