Ещё один вопрос по диапазонам. Надеюсь после моей лекции все устыдились и ответы будут обстоятельными и интересными.
Есть код:
struct S { int x, y; };
std::vector<S> v{{1, 0}, {2, 0}, {4, 0}};
auto it = ranges::find(v | views::transform(std::mem_fn(&S::x)), 4).base();
Что тут происходит: я проецирую вектор на инты, ищу там 4 и прошу итератор (base) на исходный вектор.
https://godbolt.org/z/hhWaPsjsj
Он не работает, но GCC и ToT Clang говорят разные вещи.
У clang там просто ranges::dangling (хотя как может провиснуть итератор на существующий вектор?)
У gcc там нечто более интересное.
Опять таки исходный библиотечный код один и тот же. Как бы вы это исследовали? Кто тут прав?
#questions
Есть код:
struct S { int x, y; };
std::vector<S> v{{1, 0}, {2, 0}, {4, 0}};
auto it = ranges::find(v | views::transform(std::mem_fn(&S::x)), 4).base();
Что тут происходит: я проецирую вектор на инты, ищу там 4 и прошу итератор (base) на исходный вектор.
https://godbolt.org/z/hhWaPsjsj
Он не работает, но GCC и ToT Clang говорят разные вещи.
У clang там просто ranges::dangling (хотя как может провиснуть итератор на существующий вектор?)
У gcc там нечто более интересное.
Опять таки исходный библиотечный код один и тот же. Как бы вы это исследовали? Кто тут прав?
#questions