// File: oknenavin[P]cxon/test/../src/cxon/lang/common/cio/string.hxx
// Function: std::enable_if<!chr::is_char_8<char>::value || !is_forward_iterator<std::istreambuf_iterator<char, std::char_traits<char>>>::value, bool>::type cxon::cio::str::imp::string_read_tail_<cxon::JSON<cxon::cio::str::raw_traits<cxon::json::format_traits>>, cxon::cnt::range_container<char*>, std::istreambuf_iterator<char, std::char_traits<char>>, cxon::context<cxon::JSON<cxon::json::format_traits>>, char>(cxon::cnt::range_container<char*>&, std::istreambuf_iterator<char, std::char_traits<char>>&, std::istreambuf_iterator<char, std::char_traits<char>>, cxon::context<cxon::JSON<cxon::json::format_traits>>&)
inline auto string_read_tail_(C& c, II& i, II e, Cx& cx)
                -> enable_if_t<!chr::is_char_8<T>::value || !is_forward_iterator<II>::value, bool>
            {
                constexpr bool HANDLE_ESCAPES = is_unquoted_key_context<X>::value || !X::assume_no_escapes;
                while (i != e) {
                    if (HANDLE_ESCAPES && *i == '\\') {
                        II const o = i; ++i;
                        CXON_IF_CONSTEXPR (is_unquoted_key_context<X>::value) {
                            if (i != e && *i == X::string::del)
                                return ++i, true;
                        }
                        char32_t c32 = chr::esc_to_utf32<X>(i, e, cx);
                            if (c32 == chr::bad_utf32) return rewind(i, o), false;
                        if (!char_append_(c, c32))
                            return rewind(i, o), cx/X::read_error::overflow;
                    }
                    else {
                        CXON_IF_CONSTEXPR (!is_unquoted_key_context<X>::value) {
                            if (delim_en_check<X>(*i))      return delim_en_read<X>(i, e);
                        }
                        CXON_IF_CONSTEXPR (X::validate_string_escapes) {
                            if (chr::is<X>::ctrl(*i))       return cx/X::read_error::unexpected;
                        }
                        if (!char_read_<X>(c, i, e, cx))    return false;
                    }
                }
                return cx/X::read_error::unexpected;
            }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdx, -0x18(%rbp)
movl %ecx, -0x10(%rbp)
movq %rdi, -0x20(%rbp)
movq %rsi, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movb $0x1, -0x31(%rbp)
movq -0x28(%rbp), %rdi
leaq -0x18(%rbp), %rsi
callq 0x11590
testb $0x1, %al
jne 0x1d6f8
jmp 0x1d88a
movq -0x28(%rbp), %rdi
callq 0x115c0
movsbl %al, %eax
cmpl $0x5c, %eax
jne 0x1d7cc
movq -0x28(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x48(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x28(%rbp), %rdi
callq 0x115f0
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x30(%rbp), %rcx
movq -0x60(%rbp), %rsi
movl -0x58(%rbp), %edx
callq 0x1d9c0
movl %eax, -0x4c(%rbp)
cmpl $-0x1, -0x4c(%rbp)
jne 0x1d77f
movq -0x28(%rbp), %rdi
movq -0x48(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x70(%rbp), %rsi
movl -0x68(%rbp), %edx
callq 0x1cfc0
movb $0x0, -0x1(%rbp)
jmp 0x1d89d
movq -0x20(%rbp), %rdi
movl -0x4c(%rbp), %esi
callq 0x1db30
testb $0x1, %al
jne 0x1d7c7
movq -0x28(%rbp), %rdi
movq -0x48(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x80(%rbp), %rsi
movl -0x78(%rbp), %edx
callq 0x1cfc0
movq -0x30(%rbp), %rdi
movl $0x8, %esi
callq 0x1c2f0
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x1d89d
jmp 0x1d885
movq -0x28(%rbp), %rdi
callq 0x115c0
movsbl %al, %edi
callq 0x1db80
testb $0x1, %al
jne 0x1d7e3
jmp 0x1d819
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x90(%rbp), %rsi
movl -0x88(%rbp), %edx
callq 0x1dba0
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x1d89d
movq -0x28(%rbp), %rdi
callq 0x115c0
movsbl %al, %edi
callq 0x1dc10
testb $0x1, %al
jne 0x1d830
jmp 0x1d845
movq -0x30(%rbp), %rdi
movl $0x1, %esi
callq 0x1c2f0
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x1d89d
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x18(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x30(%rbp), %r8
movq -0xa0(%rbp), %rdx
movl -0x98(%rbp), %ecx
callq 0x1dc30
testb $0x1, %al
jne 0x1d883
movb $0x0, -0x1(%rbp)
jmp 0x1d89d
jmp 0x1d885
jmp 0x1d6e2
movq -0x30(%rbp), %rdi
movl $0x1, %esi
callq 0x1c2f0
andb $0x1, %al
movb %al, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0xa0, %rsp
popq %rbp
retq
nopl (%rax,%rax)