#pragma once                           // Ubpa Static Reflection -- 99 lines
#include <string_view>                 // Repository: https://github.com/Ubpa/USRefl
#include <tuple>                       // License: https://github.com/Ubpa/USRefl/blob/master/LICENSE
#define TSTR(s) ([] { struct tmp { static constexpr auto get() { return std::basic_string_view{s}; } }; \
  return Ubpa::detail::TSTRH(tmp{}); }())
namespace Ubpa::detail {
  template<typename C, C... chars> struct TStr { using NAME_1 = C;
    template<typename T> static constexpr bool Is(T = {}) { return std::is_same_v<T, TStr>; }
    static constexpr const NAME_1* Data() { return data; } static constexpr std::size_t Size() { return sizeof...(chars); }
    static constexpr std::basic_string_view<NAME_1> View() { return data; }
  private: static constexpr NAME_1 data[]{ chars...,NAME_1(0) }; };
  template<typename NAME_1, typename T, std::size_t... Ns> constexpr auto TSTRHI(std::index_sequence<Ns...>) { return TStr<NAME_1, T::get()[Ns]...>{}; }
  template<typename T> constexpr auto TSTRH(T){return TSTRHI<typename decltype(T::get())::value_type,T>(std::make_index_sequence<T::get().size()>{});}
  template<class L, class F> constexpr std::size_t FindIf(const L&, F&&, std::index_sequence<>) { return -1; }
  template<class L, class F, std::size_t N0, std::size_t... Ns> constexpr std::size_t FindIf(const L& l, F&& f, std::index_sequence<N0, Ns...>)
  { return f(l.template Get<N0>()) ? N0 : FindIf(l, std::forward<F>(f), std::index_sequence<Ns...>{}); }
  template<class L,  There should be exactly 5 paragraphs separated by the markdown divider: ***.
user