Let's take a closer look at the error message.
std::basic_string<...>::basic_string(const std::basic_string<...> &) :
This means that it applies to the copy constructor std::string
cannot convert parameter 1 from 'const Test' to 'const std::basic_string<..> &
In fact, there is no way to convert from Test to std::string . However, Test has a string member, namely std::string s; .
Conclusion: It looks like you forgot to add .s in this place. It is probably in s(std::forward<T>(t)) .
Another possible reason is that the 1st constructor overload was selected instead of the 2nd for the copy instance of the Test instance.
Andrey
source share