Is there a type traits template which returns the base type of a given type. By base type I mean the type with all value modifiers, const, volatile, etc. strip
Obviously it depends on what exactly you want to remove from the type. std::decay could be what you are looking for (removes references, const/volatile
, decays array to pointer and function to function pointer). If you don't want the array to pointer and function to functionpointer decay, you need to stick with std::remove_reference
and std::remove_cv
(removes const
and volatile
). Of course you could combine the two into your own typetrait to make using it easier.
I would probaby define a type alias such as:
template<typename T>
using base_type = typename std::remove_cv<typename std::remove_reference<T>::type>::type;
Notice, that here R. Martinho Fernandes proposes the name Unqualified
for such a type alias.
The standard type trait std::decay, on the other hand does the same as the above and something more for array and function types, which may or may not be what you want.
try std::decay
. It mimicks what happens when you pass arguments to functions by value: strips top-level cv-qualifiers, references, converts arrays to pointers and functions to function pointers.
Regards, &rzej