#pragma once #include template struct PtrSorter { bool operator()(const T & a, const T & b) const { return *a < *b; } }; template struct PtrMemberSorter : public PtrSorter { using MT = std::decay_t; using is_transparent = MT; using PtrSorter::operator(); bool operator()(const MT & a, const T & b) const { return a < (*b).*M; } bool operator()(const T & a, const MT & b) const { return (*a).*M < b; } };