Почему это компилируется и вообще как работает место в коде и что, так можно было (QSharedPointer)?
Вообще непонятно почему у вас так. Попробуйте чистый пример вроде:QSharedPointer<QDataStream> doFoo()
{
    return false;
}
Возможно у вас что-то не то с флагами, или окружением, или компилятором, или версией Qt. Дело в том, что у QSharedPointer нет такого конструктора. Сделаю предположение, что у вас MSVC вместо компилятора :)
Советую возвращать какой-нибудь DefaultAnswer или просто nullptr.
Roman, те ссылки, что вы привели не релеванты. Они про приведение типа к bool, но не наоборот.
Дополнение:
Опыты показали, что во всем виноват конструкторQSharedPointer(std::nullptr_t), как только к своему классу добавил аналогичный конструктор, стало возможно преобразование "return false" в объект класса.nullptr_t ff2(0); //так можно
nullptr_t ff1(false); //так вроде нельзя, но MSVC не ругается
Старый и неверный ответ:
Ну так судя по документации QSharedPointer имеет соответствующие операторы преобразования, а именно bool QSharedPointer::operator bool() const
bool QSharedPointer::operator!() const
Returns true if this object is not null. This function is suitable for use in if-constructs, like:if (sharedptr) { ... }