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 Barry’s answer below).