Deduction of the function
No, you (currently) cannot. The standard way of doing this is by creating “make_like” function (such as make_pair, make_optional …): template<typename F, typename… Args> A<std::decay_t<F>> make_A (F &&f, Args&&… args) { return {std::forward<F>(f), std::forward<Args>(args)…}; } C++17 will introduce template argument deduction for class which will allow you to do exactly what you want (see also … Read more