У меня есть std::unordered_set<int *>
(в моем реальном коде я использую указатели на класс, но int *
работает и для этого примера) и хочу проверить, хранится ли данный указатель в этом наборе. Так как функция contains
будет доступна только для C ++ 20, я использую функцию size_type count( const Key& key ) const
.
Если я сейчас ищу константный указатель вместо указатель, компиляция завершается с сообщением error: invalid conversion from ‘const int*’ to ‘std::unordered_set<int*>::key_type {aka int*}’ [-fpermissive]
Пример кода:
#include <unordered_set>
int main() {
std::unordered_set<int *> set {};
int foo = 42;
set.insert(&foo);
int *pointer = &foo;
set.count(pointer); // works fine
const int *const_pointer = pointer;
set.count(const_pointer); // doesn't work
set.count(const_cast<int *>(const_pointer)); // works fine
return 0;
}
Я использую g++ (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
с C ++ 11.
Is Есть ли способ избежать этого уродливого const_cast<>
? Эта ошибка кажется мне совершенно неважной ...