Ошибка GCC: невозможно преобразовать 'const shared_ptr <...>' в 'bool' взамен
Я перехожу на GCC 4.6.1, и он начинает жаловаться на код, который отлично работает с GCC 4.4 и MSVC10. Кажется, что он не хочет конвертировать между shared_ptr
и bool
при возврате из такой функции:
class Class { shared_ptr<Somewhere> pointer_; };
bool Class::Function () const
{
return pointer_;
}
используя
return static_cast<bool> (pointer_);
все работает. Что, черт возьми, происходит? Это с --std=cpp0x
.
Ответы
Ответ 1
В С++ 11 shared_ptr
имеет explicit
operator bool
, что означает, что a shared_ptr
не может быть неявно преобразован в bool
.
Это должно предотвратить некоторые потенциальные ловушки, где shared_ptr
может быть случайно преобразовано в арифметические выражения и аналогичные ситуации.
Добавление явного приведения - это действительное исправление для вашего кода.
Вы также можете сделать return pointer_.get() != 0;
, return pointer_.get();
или даже return pointer_ != nullptr;
.
Ответ 2
shared_ptr имеет явное преобразование bool. Он может использоваться в условном выражении или может быть явно преобразован в bool, как вы это делали с static_cast.