Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdint>
- #include <type_traits>
- #include "func.h"
- template <auto FieldAccessor, typename T1, typename... Tn>
- inline constexpr bool check_field_type_v =
- (std::is_same_v<
- decltype(FieldAccessor(std::declval<T1>())),
- decltype(FieldAccessor(std::declval<Tn>()))
- > && ...);
- #define CHECK_FIELD_TYPE(FIELD, ...) \
- check_field_type_v<[](const auto& obj) -> decltype(auto) { return obj.FIELD; }, __VA_ARGS__>
- int main() {
- static_assert(sizeof(Bad) == 40);
- static_assert(sizeof(Norm) == 32);
- static_assert(sizeof(Good) == 24);
- static_assert(CHECK_FIELD_TYPE(a, Bad, Norm, Good));
- static_assert(CHECK_FIELD_TYPE(b, Bad, Norm, Good));
- static_assert(CHECK_FIELD_TYPE(c, Bad, Norm, Good));
- static_assert(CHECK_FIELD_TYPE(d, Bad, Norm, Good));
- static_assert(CHECK_FIELD_TYPE(e, Bad, Norm, Good));
- std::cout << "All static assertions passed successfully." << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment