Ilya_konstantinov

Untitled

Sep 24th, 2025
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.99 KB | Source Code | 0 0
  1. #include <iostream>
  2. #include <cstdint>
  3. #include <type_traits>
  4.  
  5. #include "func.h"
  6.  
  7. template <auto FieldAccessor, typename T1, typename... Tn>
  8. inline constexpr bool check_field_type_v =
  9.     (std::is_same_v<
  10.         decltype(FieldAccessor(std::declval<T1>())),
  11.         decltype(FieldAccessor(std::declval<Tn>()))
  12.     > && ...);
  13.  
  14. #define CHECK_FIELD_TYPE(FIELD, ...) \
  15.     check_field_type_v<[](const auto& obj) -> decltype(auto) { return obj.FIELD; }, __VA_ARGS__>
  16.  
  17.  
  18. int main() {
  19.     static_assert(sizeof(Bad) == 40);
  20.     static_assert(sizeof(Norm) == 32);
  21.     static_assert(sizeof(Good) == 24);
  22.  
  23.     static_assert(CHECK_FIELD_TYPE(a, Bad, Norm, Good));
  24.     static_assert(CHECK_FIELD_TYPE(b, Bad, Norm, Good));
  25.     static_assert(CHECK_FIELD_TYPE(c, Bad, Norm, Good));
  26.     static_assert(CHECK_FIELD_TYPE(d, Bad, Norm, Good));
  27.     static_assert(CHECK_FIELD_TYPE(e, Bad, Norm, Good));
  28.    
  29.     std::cout << "All static assertions passed successfully." << std::endl;
  30.  
  31.     return 0;
  32. }
Advertisement
Add Comment
Please, Sign In to add comment