#include struct Person { int age; int yob() const { return 2018 - age; } }; template Key extractKey(Key POD::* pMember); template POD extractPOD(Key POD::* pMember); template using Key_t = decltype(extractKey(pMember)); template using POD_t = decltype(extractPOD(pMember)); template struct Index { using Key = Key_t; using POD = POD_t; std::map data; static Key extractKey(POD const& pod) { return pod.*pmember; } }; Index<&Person::age> myAgeIndex;