Перемещение компаратора при перемещении std::set

Рейтинг: 1Ответов: 0Опубликовано: 25.05.2023

Почему эта программа выводит 1, 2, 3 в clang, gcc и msvc, соответственно? Кто прав с точки зрения стандарта? godbolt

#include <iostream>
#include <memory>
#include <set>
#include <utility>

struct C : std::less<> {
    explicit C(std::shared_ptr<int> p) : p(p) {}

    std::shared_ptr<int> p;
};

int main() {
    auto p = std::make_shared<int>(42);
    auto s1 = std::set<int, C>(C(p));

    auto s2 = std::move(s1);
    s2 = std::move(s1);

    std::cout << p.use_count() << '\n';
}

Ответы

Ответов пока нет.