I'm implementing a check to see if a type is stripped of any qualifications:
template <class T>
struct is_plain : std::integral_constant<
bool,
std::is_same_v<T, std::decay_t<T>> // *
>;
Is the logic in std::is_same_v<T, std::decay_t<T>>, i.e. check if a type is stripped of anything that decay would remove,available as a standard trait?
If not, is my implementation missing something? I just want to make sure (in a static assertion) that one does not pass pointers or references to some class.
Update
As pointed out by @NathanOliver, decay won't remove pointerness (if that's a word), so decay_t<int*>==int*. I wasn't aware of that, so an addition to the desciprion would be that I want to remove pointers from the type as well.