Почему std::prev(), примененный к итератору QSet<int*>, дает мне ошибку сегмента?

У меня Debian 11 amd64, Qt 5.15.2, и я пытаюсь использоватьstd::prev(it.end())чтобы получить последний элемент вQSet, так:

      #include <QSet>

int main() {
    return *(int*)(*(std::prev(QSet<int*>({new int(10)}).end())));
}

Но когда я запускаю это, у меня возникает ошибка.

Если я изменюсьstd::prev()to , все работает отлично — я получаю код возврата 10, как и ожидалось (последний элемент созданного мной набора —int*до 10). Ноoperator--устарел в Qt 5.15.

Вероятно, это хорошо работает на разных версиях Qt, но моя цель — заставить работать именно эту версию Qt.

Кто-нибудь знает, что я делаю неправильно?

PS При необходимости вы можете просмотреть готовый к использованию фрагмент демо-кода по адресу https://github.com/makise-homura/qt-crash-test .

0 ответов

Другие вопросы по тегам