// File: /workspace/github_cpp_makefile_star2_O2/Heptagon196[P]Gos/Reflection/./ReflMgrInit.h
// Function: void ReflMgrTool::AutoRegister<SharedObject>()
void AutoRegister() {
        auto& mgr = ReflMgr::Instance();
        mgr.AddClass<T>();

#define METHODS_CONCEPT(name) MetaMethods::has_operator_ ## name
#define METHODS_NAME(name) MetaMethods::operator_ ## name

#define DEFBIOP_BASE(U, name, func)                                             \
        if constexpr (METHODS_CONCEPT(name)<T, U>) {                            \
            mgr.AddMethod<T>(std::function(                                     \
                [](T* self, const U& other) -> decltype(auto) { func }          \
            ), METHODS_NAME(name));                                             \
        }                                                                       \

#define DEFBIOP(name, op) \
        DEFBIOP_BASE(T, name, return (*self) op other;)

#define DEFSINGLE_BASE(name, func)                                              \
        if constexpr (METHODS_CONCEPT(name)<T>) {                               \
            mgr.AddMethod<T>(std::function(                                     \
                [](T* self) -> decltype(auto) { func }                          \
            ), METHODS_NAME(name));                                             \
        }                                                                       \

#define DEFSINGLE(name, func) \
        DEFSINGLE_BASE(name, return func;)

        DEFBIOP(add, +);
        DEFBIOP(sub, -);
        DEFBIOP(mul, *);
        DEFBIOP(div, /);
        DEFBIOP(mod, %);
        DEFBIOP_BASE(T, pow, return std::pow((double)*self, (double)other););
        DEFBIOP(eq, ==);
        DEFBIOP(ne, !=);
        DEFBIOP(lt, <);
        DEFBIOP(le, <=);
        DEFBIOP(gt, >);
        DEFBIOP(ge, >=);
        DEFSINGLE(unm, -(*self));
        DEFSINGLE(indirection, *(*self));
        DEFSINGLE(begin, std::begin(*self));
        DEFSINGLE(end, std::end(*self));
        DEFBIOP_BASE(int, index, return (*self)[other];);
        DEFBIOP_BASE(size_t, index, return (*self)[other];);
        DEFBIOP_BASE(T, ctor, self->ctor(other););
        DEFSINGLE_BASE(dtor, self->dtor(););
        if constexpr (MetaMethods::has_operator_inc_pre<T>) {
            mgr.AddMethod<T>(std::function([](T* self) -> decltype(auto) { return ++(*self); }), MetaMethods::operator_inc);
        }
        if constexpr (MetaMethods::has_operator_dec_pre<T>) {
            mgr.AddMethod<T>(std::function([](T* self) -> decltype(auto) { return --(*self); }), MetaMethods::operator_dec);
        }
        if constexpr (MetaMethods::has_operator_inc_post<T>) {
            mgr.AddMethod<T>(std::function([](T* self, int) -> decltype(auto) { return (*self)++; }), MetaMethods::operator_inc);
        }
        if constexpr (MetaMethods::has_operator_dec_post<T>) {
            mgr.AddMethod<T>(std::function([](T* self, int) -> decltype(auto) { return (*self)--; }), MetaMethods::operator_dec);
        }
        if constexpr (MetaMethods::has_operator_tostring<T>) {
            mgr.AddMethod<T>(
                std::function<std::string(T*)>([](T* self) -> decltype(auto) {
                    std::stringstream ss;
                    ss << *self;
                    return (std::string)(ss.str());
                }),
                MetaMethods::operator_tostring
            );
        }
        if constexpr (MetaMethods::has_operator_assign<T>) {
            mgr.AddMethod<T>(std::function(
                [](T* self, const T& other) -> decltype(auto) { return (*self) = other; }
            ), MetaMethods::operator_assign);
        }

#undef METHODS_CONCEPT
#undef METHODS_NAME
#define METHODS_CONCEPT(name) ContainerMethods::has_ ## name
#define METHODS_NAME(name) #name
#define VALUE typename T::value_type
#define KEY typename T::key_type

        if constexpr (ContainerMethods::has_value_type<T>) {
            DEFBIOP_BASE(VALUE, push_back, self->push_back(other););
            DEFBIOP_BASE(VALUE, push_front, self->push_back(other););
            DEFBIOP_BASE(VALUE, push, self->push_back(other););
        }

// Assembly:
pushq %rbx
subq $0x300, %rsp            # imm = 0x300
callq 0x1df9e
leaq 0x2f8(%rsp), %rcx
andq $0x0, -0x10(%rcx)
movq %rax, %rbx
movq %rcx, -0x30(%rcx)
movq $0x1, -0x28(%rcx)
xorps %xmm0, %xmm0
movups %xmm0, -0x20(%rcx)
movl $0x3f800000, -0x10(%rcx) # imm = 0x3F800000
movups %xmm0, -0x8(%rcx)
leaq 0x2c8(%rsp), %rsi
movq %rax, %rdi
callq 0x2e8b8
leaq 0x2c8(%rsp), %rdi
callq 0x2b990
leaq 0x2a0(%rsp), %rsi
xorps %xmm0, %xmm0
movaps %xmm0, (%rsi)
leaq 0xc0fc(%rip), %rax      # 0x2f592
movq %rax, 0x18(%rsi)
leaq 0xc105(%rip), %rax      # 0x2f5a6
movq %rax, 0x10(%rsi)
leaq 0x728d8(%rip), %rcx     # 0x95d84
pushq $0x5
popq %rdx
movq %rbx, %rdi
callq 0x2e918
leaq 0x2a0(%rsp), %rdi
callq 0x21f04
xorps %xmm0, %xmm0
leaq 0x280(%rsp), %rsi
movaps %xmm0, (%rsi)
leaq 0xc0e5(%rip), %rax      # 0x2f5be
movq %rax, 0x18(%rsi)
leaq 0xc0ee(%rip), %rax      # 0x2f5d2
movq %rax, 0x10(%rsi)
leaq 0x7289b(%rip), %rcx     # 0x95d8a
pushq $0x5
popq %rdx
movq %rbx, %rdi
callq 0x2e918
leaq 0x280(%rsp), %rdi
callq 0x21f04
leaq 0x260(%rsp), %rsi
xorps %xmm0, %xmm0
movaps %xmm0, (%rsi)
leaq 0xc0ce(%rip), %rax      # 0x2f5ea
movq %rax, 0x18(%rsi)
leaq 0xc0d7(%rip), %rax      # 0x2f5fe
movq %rax, 0x10(%rsi)
leaq 0x7285e(%rip), %rcx     # 0x95d90
pushq $0x5
popq %rdx
movq %rbx, %rdi
callq 0x2e918
leaq 0x260(%rsp), %rdi
callq 0x21f04
xorps %xmm0, %xmm0
leaq 0x240(%rsp), %rsi
movaps %xmm0, (%rsi)
leaq 0xc0b7(%rip), %rax      # 0x2f616
movq %rax, 0x18(%rsi)
leaq 0xc0c0(%rip), %rax      # 0x2f62a
movq %rax, 0x10(%rsi)
leaq 0x72821(%rip), %rcx     # 0x95d96
pushq $0x5
popq %rdx
movq %rbx, %rdi
callq 0x2e918
leaq 0x240(%rsp), %rdi
callq 0x21f04
leaq 0x220(%rsp), %rsi
xorps %xmm0, %xmm0
movaps %xmm0, (%rsi)
leaq 0xc0a0(%rip), %rax      # 0x2f642
movq %rax, 0x18(%rsi)
leaq 0xc0a9(%rip), %rax      # 0x2f656
movq %rax, 0x10(%rsi)
leaq 0x727e4(%rip), %rcx     # 0x95d9c
pushq $0x5
popq %rdx
movq %rbx, %rdi
callq 0x2e918
leaq 0x220(%rsp), %rdi
callq 0x21f04
xorps %xmm0, %xmm0
leaq 0x200(%rsp), %rsi
movaps %xmm0, (%rsi)
leaq 0xc089(%rip), %rax      # 0x2f66e
movq %rax, 0x18(%rsi)
leaq 0xc092(%rip), %rax      # 0x2f682
movq %rax, 0x10(%rsi)
leaq 0x727ad(%rip), %rcx     # 0x95da8
pushq $0x4
popq %rdx
movq %rbx, %rdi
callq 0x2e918
leaq 0x200(%rsp), %rdi
callq 0x21f04
leaq 0x1e0(%rsp), %rsi
xorps %xmm0, %xmm0
movaps %xmm0, (%rsi)
leaq 0xc072(%rip), %rax      # 0x2f69a
movq %rax, 0x18(%rsi)
leaq 0xc07b(%rip), %rax      # 0x2f6ae
movq %rax, 0x10(%rsi)
leaq 0x7276f(%rip), %rcx     # 0x95dad
pushq $0x4
popq %rdx
movq %rbx, %rdi
callq 0x2e918
leaq 0x1e0(%rsp), %rdi
callq 0x21f04
xorps %xmm0, %xmm0
leaq 0x1c0(%rsp), %rsi
movaps %xmm0, (%rsi)
leaq 0xc05b(%rip), %rax      # 0x2f6c6
movq %rax, 0x18(%rsi)
leaq 0xc064(%rip), %rax      # 0x2f6da
movq %rax, 0x10(%rsi)
leaq 0x72731(%rip), %rcx     # 0x95db2
pushq $0x4
popq %rdx
movq %rbx, %rdi
callq 0x2e918
leaq 0x1c0(%rsp), %rdi
callq 0x21f04
leaq 0x1a0(%rsp), %rsi
xorps %xmm0, %xmm0
movaps %xmm0, (%rsi)
leaq 0xc044(%rip), %rax      # 0x2f6f2
movq %rax, 0x18(%rsi)
leaq 0xc04d(%rip), %rax      # 0x2f706
movq %rax, 0x10(%rsi)
leaq 0x726f3(%rip), %rcx     # 0x95db7
pushq $0x4
popq %rdx
movq %rbx, %rdi
callq 0x2e918
leaq 0x1a0(%rsp), %rdi
callq 0x21f04
xorps %xmm0, %xmm0
leaq 0x180(%rsp), %rsi
movaps %xmm0, (%rsi)
leaq 0xc02d(%rip), %rax      # 0x2f71e
movq %rax, 0x18(%rsi)
leaq 0xc036(%rip), %rax      # 0x2f732
movq %rax, 0x10(%rsi)
leaq 0x726b5(%rip), %rcx     # 0x95dbc
pushq $0x4
popq %rdx
movq %rbx, %rdi
callq 0x2e918
leaq 0x180(%rsp), %rdi
callq 0x21f04
leaq 0x160(%rsp), %rsi
xorps %xmm0, %xmm0
movaps %xmm0, (%rsi)
leaq 0xc016(%rip), %rax      # 0x2f74a
movq %rax, 0x18(%rsi)
leaq 0xc01f(%rip), %rax      # 0x2f75e
movq %rax, 0x10(%rsi)
leaq 0x72677(%rip), %rcx     # 0x95dc1
pushq $0x4
popq %rdx
movq %rbx, %rdi
callq 0x2e918
leaq 0x160(%rsp), %rdi
callq 0x21f04
xorps %xmm0, %xmm0
leaq 0x140(%rsp), %rsi
movaps %xmm0, (%rsi)
leaq 0xc4a3(%rip), %rax      # 0x2fc1a
movq %rax, 0x18(%rsi)
leaq 0xc4aa(%rip), %rax      # 0x2fc2c
movq %rax, 0x10(%rsi)
leaq 0x72639(%rip), %rcx     # 0x95dc6
pushq $0x5
popq %rdx
movq %rbx, %rdi
callq 0x2ea2e
leaq 0x140(%rsp), %rdi
callq 0x21f04
leaq 0x120(%rsp), %rsi
xorps %xmm0, %xmm0
movaps %xmm0, (%rsi)
leaq 0xc48a(%rip), %rax      # 0x2fc44
movq %rax, 0x18(%rsi)
leaq 0xc491(%rip), %rax      # 0x2fc56
movq %rax, 0x10(%rsi)
leaq 0x7263e(%rip), %rcx     # 0x95e0e
pushq $0xd
popq %rdx
movq %rbx, %rdi
callq 0x2ea2e
leaq 0x120(%rsp), %rdi
callq 0x21f04
xorps %xmm0, %xmm0
leaq 0x100(%rsp), %rsi
movaps %xmm0, (%rsi)
leaq 0xc471(%rip), %rax      # 0x2fc6e
movq %rax, 0x18(%rsi)
leaq 0xc478(%rip), %rax      # 0x2fc80
movq %rax, 0x10(%rsi)
leaq 0x725e1(%rip), %rcx     # 0x95df4
pushq $0x7
popq %rdx
movq %rbx, %rdi
callq 0x2ea2e
leaq 0x100(%rsp), %rdi
callq 0x21f04
leaq 0xe0(%rsp), %rsi
xorps %xmm0, %xmm0
movaps %xmm0, (%rsi)
leaq 0xc458(%rip), %rax      # 0x2fc98
movq %rax, 0x18(%rsi)
leaq 0xc45f(%rip), %rax      # 0x2fcaa
movq %rax, 0x10(%rsi)
leaq 0x725a6(%rip), %rcx     # 0x95dfc
pushq $0x5
popq %rdx
movq %rbx, %rdi
callq 0x2ea2e
leaq 0xe0(%rsp), %rdi
callq 0x21f04
xorps %xmm0, %xmm0
leaq 0xc0(%rsp), %rsi
movaps %xmm0, (%rsi)
leaq 0xc8b5(%rip), %rax      # 0x30138
movq %rax, 0x18(%rsi)
leaq 0xc8b2(%rip), %rax      # 0x30140
movq %rax, 0x10(%rsi)
leaq 0x72554(%rip), %rcx     # 0x95ded
pushq $0x6
popq %rdx
movq %rbx, %rdi
callq 0x2eb44
leaq 0xc0(%rsp), %rdi
callq 0x21f04
leaq 0xa0(%rsp), %rsi
xorps %xmm0, %xmm0
movaps %xmm0, (%rsi)
leaq 0xc892(%rip), %rax      # 0x30158
movq %rax, 0x18(%rsi)
leaq 0xc899(%rip), %rax      # 0x3016a
movq %rax, 0x10(%rsi)
leaq 0x72526(%rip), %rcx     # 0x95e02
pushq $0x5
popq %rdx
movq %rbx, %rdi
callq 0x2ea2e
leaq 0xa0(%rsp), %rdi
callq 0x21f04
xorps %xmm0, %xmm0
leaq 0x80(%rsp), %rsi
movaps %xmm0, (%rsi)
leaq 0xc879(%rip), %rax      # 0x30182
movq %rax, 0x18(%rsi)
leaq 0xc880(%rip), %rax      # 0x30194
movq %rax, 0x10(%rsi)
leaq 0x724e9(%rip), %rcx     # 0x95e08
pushq $0x5
popq %rdx
movq %rbx, %rdi
callq 0x2ea2e
leaq 0x80(%rsp), %rdi
callq 0x21f04
leaq 0x60(%rsp), %rsi
xorps %xmm0, %xmm0
movaps %xmm0, (%rsi)
leaq 0xcd3d(%rip), %rax      # 0x30686
movq %rax, 0x18(%rsi)
leaq 0xcd46(%rip), %rax      # 0x3069a
movq %rax, 0x10(%rsi)
leaq 0x724a3(%rip), %rcx     # 0x95e02
pushq $0x5
popq %rdx
movq %rbx, %rdi
callq 0x2ec5a
leaq 0x60(%rsp), %rdi
callq 0x21f04
xorps %xmm0, %xmm0
leaq 0x40(%rsp), %rsi
movaps %xmm0, (%rsi)
leaq 0xcd2c(%rip), %rax      # 0x306b2
movq %rax, 0x18(%rsi)
leaq 0xcd35(%rip), %rax      # 0x306c6
movq %rax, 0x10(%rsi)
leaq 0x7246c(%rip), %rcx     # 0x95e08
pushq $0x5
popq %rdx
movq %rbx, %rdi
callq 0x2ec5a
leaq 0x40(%rsp), %rdi
callq 0x21f04
leaq 0x20(%rsp), %rsi
xorps %xmm0, %xmm0
movaps %xmm0, (%rsi)
leaq 0xd1b9(%rip), %rax      # 0x30b7c
movq %rax, 0x18(%rsi)
leaq 0xd1bc(%rip), %rax      # 0x30b8a
movq %rax, 0x10(%rsi)
leaq 0x72402(%rip), %rcx     # 0x95ddb
pushq $0xa
popq %rdx
movq %rbx, %rdi
callq 0x2ed70
leaq 0x20(%rsp), %rdi
callq 0x21f04
xorps %xmm0, %xmm0
movq %rsp, %rsi
movaps %xmm0, (%rsi)
leaq 0xd74a(%rip), %rax      # 0x31148
movq %rax, 0x18(%rsi)
leaq 0xd74b(%rip), %rax      # 0x31154
movq %rax, 0x10(%rsi)
leaq 0x72408(%rip), %rcx     # 0x95e1c
pushq $0x8
popq %rdx
movq %rbx, %rdi
callq 0x2ee86
movq %rsp, %rdi
callq 0x21f04
addq $0x300, %rsp            # imm = 0x300
popq %rbx
retq
movq %rax, %rbx
movq %rsp, %rdi
jmp 0x23b62
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
jmp 0x23b62
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
jmp 0x23b62
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
jmp 0x23b62
movq %rax, %rbx
leaq 0x80(%rsp), %rdi
jmp 0x23b62
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
jmp 0x23b62
movq %rax, %rbx
leaq 0xc0(%rsp), %rdi
jmp 0x23b62
movq %rax, %rbx
leaq 0xe0(%rsp), %rdi
jmp 0x23b62
movq %rax, %rbx
leaq 0x100(%rsp), %rdi
jmp 0x23b62
movq %rax, %rbx
leaq 0x120(%rsp), %rdi
jmp 0x23b62
movq %rax, %rbx
leaq 0x140(%rsp), %rdi
jmp 0x23b62
movq %rax, %rbx
leaq 0x160(%rsp), %rdi
jmp 0x23b62
movq %rax, %rbx
leaq 0x180(%rsp), %rdi
jmp 0x23b62
movq %rax, %rbx
leaq 0x1a0(%rsp), %rdi
jmp 0x23b62
movq %rax, %rbx
leaq 0x1c0(%rsp), %rdi
jmp 0x23b62
movq %rax, %rbx
leaq 0x1e0(%rsp), %rdi
jmp 0x23b62
movq %rax, %rbx
leaq 0x200(%rsp), %rdi
jmp 0x23b62
movq %rax, %rbx
leaq 0x220(%rsp), %rdi
jmp 0x23b62
movq %rax, %rbx
leaq 0x240(%rsp), %rdi
jmp 0x23b62
movq %rax, %rbx
leaq 0x260(%rsp), %rdi
jmp 0x23b62
movq %rax, %rbx
leaq 0x280(%rsp), %rdi
jmp 0x23b62
movq %rax, %rbx
leaq 0x2a0(%rsp), %rdi
callq 0x21f04
movq %rbx, %rdi
callq 0x11570
movq %rax, %rbx
leaq 0x2c8(%rsp), %rdi
callq 0x2b990
jmp 0x23b67
nop