// File: mattn[P]wandbox-run/./json.hpp
// Function: nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer>::iter_impl<nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer>>::operator==(nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer>::iter_impl<nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer>> const&) const
bool operator==(const iter_impl& other) const
        {
            // if objects are not the same, the comparison is undefined
            if (m_object != other.m_object)
            {
                JSON_THROW(std::domain_error("cannot compare iterators of different containers"));
            }

            assert(m_object != nullptr);

            switch (m_object->m_type)
            {
                case basic_json::value_t::object:
                {
                    return (m_it.object_iterator == other.m_it.object_iterator);
                }

                case basic_json::value_t::array:
                {
                    return (m_it.array_iterator == other.m_it.array_iterator);
                }

                default:
                {
                    return (m_it.primitive_iterator == other.m_it.primitive_iterator);
                }
            }
        }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x40(%rbp)
movq (%rax), %rax
movq -0x18(%rbp), %rcx
cmpq (%rcx), %rax
je 0x21b27
movl $0x10, %edi
callq 0x25740
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x48(%rbp)
leaq 0xb4881(%rip), %rsi     # 0xd6370
callq 0x39540
jmp 0x21af6
movq -0x48(%rbp), %rdi
leaq 0xf338f(%rip), %rsi     # 0x114e90
leaq 0xd5d8(%rip), %rdx      # 0x2f0e0
callq 0x26790
movq -0x48(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
callq 0x257a0
jmp 0x21be2
movq -0x40(%rbp), %rax
cmpq $0x0, (%rax)
je 0x21b33
jmp 0x21b52
leaq 0xb43c0(%rip), %rdi     # 0xd5efa
leaq 0xb2ba0(%rip), %rsi     # 0xd46e1
movl $0x242c, %edx           # imm = 0x242C
leaq 0xb4854(%rip), %rcx     # 0xd63a1
callq 0x13130
movq -0x40(%rbp), %rax
movq (%rax), %rax
movb (%rax), %al
movb %al, -0x49(%rbp)
subb $0x1, %al
je 0x21b6d
jmp 0x21b64
movb -0x49(%rbp), %al
subb $0x2, %al
je 0x21b89
jmp 0x21bad
movq -0x40(%rbp), %rdi
addq $0x8, %rdi
movq -0x18(%rbp), %rsi
addq $0x8, %rsi
callq 0x1ee50
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x21bd7
movq -0x40(%rbp), %rdi
addq $0x8, %rdi
addq $0x8, %rdi
movq -0x18(%rbp), %rsi
addq $0x8, %rsi
addq $0x8, %rsi
callq 0x21bf0
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x21bd7
movq -0x40(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x38(%rbp)
movq -0x30(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0x21c30
andb $0x1, %al
movb %al, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x50, %rsp
popq %rbp
retq
movq -0x20(%rbp), %rdi
callq 0xd1250
nopl (%rax,%rax)