Подтвердить что ты не робот

Ошибка 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.

4b9b3361

Ответ 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.