fork(3) download
  1. #include <iostream>
  2.  
  3. template <typename T1, typename T2>
  4. struct offset_of_impl {
  5. static T2 object;
  6.  
  7. static constexpr uintptr_t offset(T1 T2::*member) {
  8. return uintptr_t(&(offset_of_impl<T1, T2>::object.*member)) -
  9. uintptr_t(&offset_of_impl<T1, T2>::object);
  10. }
  11. };
  12.  
  13. template <typename T1, typename T2>
  14. inline constexpr uintptr_t offset_of(T1 T2::*member) {
  15. return offset_of_impl<T1, T2>::offset(member);
  16. }
  17.  
  18. struct vec2 { float x, y; };
  19. struct vec3 : vec2 { float z; };
  20. struct vec4 : vec3 { float w; };
  21.  
  22. enum { Value = offset_of(&vec4::y) };
  23.  
  24. int main() {
  25. std::cout << Value << "\n";
  26. return 0;
  27. }
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
4