| 64 | |
| 65 | template<typename S, typename M> |
| 66 | std::size_t MemberPointerOffset(M S::*memberPtr) |
| 67 | { |
| 68 | const S sample{}; |
| 69 | const auto* base = reinterpret_cast<const uint8_t*>(&sample); |
| 70 | const auto* member = reinterpret_cast<const uint8_t*>(&(sample.*memberPtr)); |
| 71 | return static_cast<std::size_t>(member - base); |
| 72 | } |
| 73 | |
| 74 | // get the type of the elements in any iterable type (typically containers) |
| 75 | template<typename T> |
no outgoing calls
no test coverage detected