Версия по умолчанию std::map<int*, char>
использует less<int*>
в качестве компаратора, который, в свою очередь, имеет определенную функцию ()(const int*, const int*)
.
Эта функция не будет принимать int*
Однако, если вы используете less<>
, он будет работать:
std::map<int*, char, std::less<>> m;
Причина этого в том, что std::less<void>
определяет функцию шаблона,
template< class T, class U>
constexpr auto operator()( T&& lhs, U&& rhs ) const
И это работает простохорошо, когда сравниваются константные и неконстантные указатели.