// File: /workspace/github_cpp_makefile_star2_O3/dechimal[P]TaggedUnion/include/desalt/datatypes/sum.hpp
// Function: auto void desalt::datatypes::detail::sum::sum<desalt::datatypes::detail::rec::rec<0ul>, desalt::datatypes::detail::sum::sum<desalt::datatypes::detail::sum::sum<desalt::datatypes::detail::rec::rec<0ul>, desalt::datatypes::detail::rec::rec<1ul>, char>, int>, char>::construct_using_auto_storage_save<desalt::datatypes::detail::sum::sum<desalt::datatypes::detail::rec::rec<0ul>, desalt::datatypes::detail::sum::sum<desalt::datatypes::detail::sum::sum<desalt::datatypes::detail::rec::rec<0ul>, desalt::datatypes::detail::rec::rec<1ul>, char>, int>, char>>(desalt::datatypes::detail::sum::sum<desalt::datatypes::detail::rec::rec<0ul>, desalt::datatypes::detail::sum::sum<desalt::datatypes::detail::sum::sum<desalt::datatypes::detail::rec::rec<0ul>, desalt::datatypes::detail::rec::rec<1ul>, char>, int>, char>&&)::'lambda'(desalt::datatypes::detail::sum::sum<desalt::datatypes::detail::rec::rec<0ul>, desalt::datatypes::detail::sum::sum<desalt::datatypes::detail::sum::sum<desalt::datatypes::detail::rec::rec<0ul>, desalt::datatypes::detail::rec::rec<1ul>, char>, int>, char>)::operator()<desalt::datatypes::detail::utils::tag<1ul>>(desalt::datatypes::detail::sum::sum<desalt::datatypes::detail::rec::rec<0ul>, desalt::datatypes::detail::sum::sum<desalt::datatypes::detail::sum::sum<desalt::datatypes::detail::rec::rec<0ul>, desalt::datatypes::detail::rec::rec<1ul>, char>, int>, char>) const
void construct_using_auto_storage_save(Union && other) {
        this->dispatch([&] (auto t) {
            storage<t.value> tmp(std::move(this->get_unchecked(t)));
            this->destroy(t);
            try {
                this->construct(std::forward<Union>(other));
            } catch (...) {
                this->construct_directly(t, std::move(tmp));
                throw;
            }
        });
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movq %rdi, %rbx
movq (%rdi), %rbp
leaq 0x8(%rbp), %r12
movl 0x8(%rbp), %eax
movl $0x7fffffff, %r13d      # imm = 0x7FFFFFFF
andq %r13, %rax
movq %rsp, %r15
movl %eax, (%r15)
leaq 0x10(%rsp), %r14
movq %r15, (%r14)
movq %r12, 0x8(%r14)
leaq 0x6c33(%rip), %rcx      # 0xdbf0
movq %r14, %rdi
callq *(%rcx,%rax,8)
movq %r12, (%r14)
movl 0x8(%rbp), %eax
andq %r13, %rax
leaq 0x6bcd(%rip), %r14      # 0xdba0
leaq 0x10(%rsp), %rdi
callq *(%r14,%rax,8)
movq 0x8(%rbx), %rax
leaq 0x28(%rsp), %rdi
movq %rbp, (%rdi)
movq %rax, 0x8(%rdi)
movl (%rax), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
leaq 0x6bd6(%rip), %rcx      # 0xdbd0
callq *(%rcx,%rax,8)
leaq 0x10(%rsp), %rdi
movq %r15, (%rdi)
movl (%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r14,%rax,8)
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x7079
movq %rax, %rdi
callq 0x2050
movl (%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, (%r12)
leaq 0x10(%rsp), %rdi
movq %r12, (%rdi)
movq %r15, 0x8(%rdi)
leaq 0x6ba7(%rip), %rcx      # 0xdbf0
callq *(%rcx,%rax,8)
callq 0x20e0
movq %rax, %rbx
callq 0x2100
leaq 0x20(%rsp), %rdi
movq %r15, (%rdi)
movl (%rsp), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
callq *(%r14,%rax,8)
movq %rbx, %rdi
callq 0x2120
jmp 0x7079
jmp 0x7079
movq %rax, %rdi
callq 0x496a
nop