https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90943
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Component|c++ |libstdc++ --- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- This is all it takes to compile your example: --- a/libstdc++-v3/include/std/variant +++ b/libstdc++-v3/include/std/variant @@ -795,7 +795,7 @@ namespace __variant template <typename _Maybe_variant_cookie, typename _Variant> struct _Extra_visit_slot_needed { - template <typename> struct _Variant_never_valueless; + template <typename> struct _Variant_never_valueless : false_type { }; template <typename... _Types> struct _Variant_never_valueless<variant<_Types...>> This just assumes that unrecognized types are not never-valueless variants, which means some extra code gets generated to handle the valueless case even if your variant base class will never be valueless. I haven't considered if anything else would break by doing that.