Визит возвращает один тип.
Ваш код просит вернуть два разных типа.
Он не может этого сделать.
Теперь единственный тип, который он возвращает, может, в свою очередь, быть вариантом над двумя типами. Но это в основном пинает банку в будущем.
{[](data_output& d)->std::variant<int,double> {return d.create_data();},
[](data_output_two& d)->std::variant<int, double> {return d.create_data();}};
с этим вам придется вернуться, чтобы напечатать:
std::visit( [](auto&&x){std::cout << x << "\n";}, std::visit(my_lambda, data_vec[0]) );
Теперь вы можете написать несколько метапрограммирований, чтобы определить правильный тип возвращаемого значения композитной перегрузки / посещения.
Но более просто выполнить обработку при первом посещении:
std::visit([&](auto&&x){ std::cout<<my_lambda(x)<<"\n";}, data_vec[0] );