template<typename T>
struct test
{
std::string key;
T value;
template<typename U>
using decay = typename std::decay<U>::type;
template<typename U = decay<T>, typename US = decay<std::string>>
test(U&& _value, US&& _key) : value(std::forward<U>(_value)), key(std::forward<US>(_key)){}
};
I use decay like this in my almost every project. I want ask, if its a good use instead, of writing something like this :
test(T&& _value, std::string&& _key) : value(std::move(_value)), key(std::move(_key)){}
test(const T& _value, std::string&& _key) : value(_value), key(std::move(_key)){}
test(T&& _value, const std::string& _key) : value(std::move(_value)), key(_key){}
test(const T& _value, const std::string& _key) : value(_value), key(_key){}