https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107282
Martin Liška <marxin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |marxin at gcc dot gnu.org --- Comment #1 from Martin Liška <marxin at gcc dot gnu.org> --- Thanks for the report, please always paste source code here and not to an external service: #include <variant> template <class... Ts> struct overloaded : Ts... { using Ts::operator()...; }; template <class... Ts> overloaded(Ts...) -> overloaded<Ts...>; using Var1 = std::variant<int, float>; struct Unrelated { Var1 bar; }; // works without the template template <class T> Var1 copyLifeState(Var1 const& value) { return std::visit(overloaded{ [](auto&) -> Var1 { return {1}; }, [](Unrelated& v) -> Var1 { return std::visit( overloaded{ [](int) -> Var1 { return {2}; }, [](float) -> Var1 { return {2}; }, }, v.bar); }, }, value); } int main() { Var1 value = 2; copyLifeState<int>(value); }