You seem to confuse levels of constness.
is_const correctly reports that the type lacks the top-level const (const char&const
would be true if legal).
Your overload matches the correct function on constness left to &.
Try the same thing with pointers, char*
, const char*
, char* const
and const char*const
to see the levels better.