Cố gắng làm một cái gì đó như ...
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;
};Tôi biết tôi cần sử dụng SFINAE ở đây nhưng làm cách nào để phân biệt tham số gọi lại với tham số giá trị? Sẽ an toàn khi cho rằng giá trị không thể được sử dụng làm cuộc gọi lại.
Tôi đã thử enable_ifvới is_function, result_of, invoke_result, is_invocable, và những người khác, nhưng không ai trong số nó hoạt động đúng. Nó thậm chí có thể?
constexprhơn SFINAE vì thời gian biên dịch tốt hơn