25#include "../generator.hpp"
26#include "detail/data_member_binding.hpp"
27#include "detail/fake_object_wrapper.hpp"
28#include "detail/parse_data_member_name.hpp"
29#include "identifier.hpp"
36namespace essence::meta {
43 requires std::is_class_v<T>
44 generator<std::string_view> probe_data_member_names() {
46 const auto names = []<std::size_t... Is>(
47 std::index_sequence<Is...>) -> generator<std::string_view> {
48#if defined(__llvm__) && defined(__clang__)
49 (
co_yield detail::parse_data_member_name(get_literal_string_v<T,
50 detail::make_fake_object_wrapper(
51 std::get<Is>(detail::make_data_member_pointers(detail::make_fake_object_wrapper<T>())))>()),
54 (
co_yield detail::parse_data_member_name(get_literal_string_v<T,
55 std::get<Is>(detail::make_data_member_pointers(detail::make_fake_object_wrapper<T>()))>()),
58 }(std::make_index_sequence<std::tuple_size_v<
decltype(detail::make_data_member_pointers(
59 detail::make_fake_object_wrapper<T>()))>>{});
61 for (
auto&& item : names) {