https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100384
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|INVALID |--- Ever confirmed|0 |1 Last reconfirmed| |2021-05-03 Status|RESOLVED |NEW --- Comment #6 from Jonathan Wakely <redi at gcc dot gnu.org> --- Yes, we can fix this easily without the rest of P2162 (and can backport it): --- a/libstdc++-v3/include/std/variant +++ b/libstdc++-v3/include/std/variant @@ -1248,7 +1248,8 @@ namespace __variant #endif template<typename _Visitor, typename... _Variants> - constexpr decltype(auto) visit(_Visitor&&, _Variants&&...); + constexpr invoke_result_t<_Visitor, variant_alternative_t<0, _Variants>...> + visit(_Visitor&&, _Variants&&...); template<typename... _Types> inline enable_if_t<(is_move_constructible_v<_Types> && ...) @@ -1736,7 +1737,7 @@ namespace __variant template<typename _Visitor, typename... _Variants> - constexpr decltype(auto) + constexpr invoke_result_t<_Visitor, variant_alternative_t<0, _Variants>...> visit(_Visitor&& __visitor, _Variants&&... __variants) { if ((__variants.valueless_by_exception() || ...))