https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90943

--- Comment #2 from Barry Revzin <barry.revzin at gmail dot com> ---
What if we did something like (using pretty names for a sec):

template <typename _Maybe_variant_cookie, typename _Variant>
struct _Extra_visit_slot_needed
{
  template <typename... _Types>
  static bool_constant<__never_valueless<_Types...>()>
  __impl(const variant<_Types...>&);
  static false_type __impl(...);

  using _Variant_never_valueless = decltype(__impl(declval<_Variant>()));


  static constexpr bool value =
    (is_same_v<_Maybe_variant_cookie, __variant_cookie>
     || is_same_v<_Maybe_variant_cookie, __variant_idx_cookie>)
     && !_Variant_never_valueless::value;
};

This should (modulo typos) work for real variant instantiations and also
anything that inherits from some variant instantiation?

Reply via email to