The implementation of discriminated union relies on std::invoke (i.e. without multi-dispatch) for the purpose of implementing invoke, which demonstrates that we should not try to add multi-dispatch to std::invoke. Basically invoke (with multi-dispatch) has proven to be higher level than std::invoke, hence the former name is wrong (or confusing, at least).
This implies that what we currently call invoke should be called something else, perhaps apply or a new function dispatch. This also applies to member functions.
The implementation of discriminated union relies on
std::invoke(i.e. without multi-dispatch) for the purpose of implementinginvoke, which demonstrates that we should not try to add multi-dispatch tostd::invoke. Basicallyinvoke(with multi-dispatch) has proven to be higher level thanstd::invoke, hence the former name is wrong (or confusing, at least).This implies that what we currently call
invokeshould be called something else, perhapsapplyor a new functiondispatch. This also applies to member functions.