Tratando de hacer algo como ...
template <class T>
struct Wrapper
{
template <class U>
void set(const U& u) { myT = u; }
template <class F>
void set(F f) { myT = f(); }
T myT;
};
Sé que necesito usar SFINAE aquí, pero ¿cómo puedo distinguir un parámetro de devolución de llamada de un parámetro de valor? Es seguro asumir que un valor no puede usarse como devolución de llamada.
He tratado enable_if
con is_function, result_of
, invoke_result
, is_invocable
, y otros, pero nada de esto funciona bien. ¿Es posible?
constexpr
a SFINAE debido a mejores tiempos de compilación