Как использовать проекцию для вложенного поля класса?

В новой версии c++ добавилась возможность использовать projection в функциях файла algorithm.

Например, для следующего класса

struct Int {
    constexpr Int() = default;
    constexpr Int(int value) : value(value) {
    }

    int value = 0;
};

Можно вызвать сортировку вот так

Int ints[10];
ranges::sort(ints, {}, &Int::value);

Но я не понимаю, как быть со структурами, которые имеют вложенные поля.

struct prop {
    int val = 0;
};

struct Int2 {
    constexpr Int2() = default;
    constexpr Int2(int value) {
      property.val = value;
    }

    using property_type = prop;

    prop property;
};

Int2 ints2[10];
ranges::sort(ints2, {}, &Int2::property::val); // Ошибка

Ответы (1 шт):

Автор решения: user490295
#include <algorithm>

struct prop {
    int val = 0;
};

struct Int2 {
    constexpr Int2() = default;
    constexpr Int2(int value) {
      property.val = value;
    }

    using property_type = prop;

    prop property;
};

int main() {
    Int2 ints2[10];
    std::ranges::sort(ints2, {},  [](auto i) { return i.property.val; });
}
→ Ссылка