Это известная ошибка Qt ( QTBUG-49748 ). Хотя он отмечен как исправленный в Qt 5.6.0, ошибка все еще присутствует, как указано в комментариях.
Почему это происходит?
Посмотрите на реализацию класса QSharedPointer qsharedpointer_impl.h .
В частности, строка:
new (result.data()) T(std::forward<Args>(arguments)...);
использует result.data () в качестве нового выражения параметры размещения . К сожалению, можно не использовать указатель const в качестве параметра размещения (подробнее см. этот вопрос здесь, в SO).
Следовательно, вы ничего не можете сделать, кроме как сообщать об этом разработчикам Qt через официальный трекер ошибок.
Вы можете взглянуть на интеллектуальные указатели, предоставляемые стандартной библиотекой (например, std :: shared_ptr ), если вы не обязаны использовать Qt.
UPDATE
Как сообщалось в Qt bug tracker, эта ошибка была исправлена в версии 5.11 ( здесь - это связанный коммит). В основном они использовали std :: remove_cv , чтобы удалить самый верхний констант из указанного типа.