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);
}

Reply via email to