Tentando fazer 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;
};
Sei que preciso usar o SFINAE aqui, mas como faço para distinguir um parâmetro de retorno de chamada de um parâmetro de valor? É seguro assumir que um valor não pode ser usado como retorno de chamada.
Eu tentei enable_ifcom is_function, result_of, invoke_result, is_invocable, e outros, mas nada disso funciona direito. Isso é possível?
constexpro SFINAE por causa dos melhores tempos de compilação #