// File: halfflat[P]tinyopt/test/test_maybe.cc
// Function: maybe_conv_Test::TestBody()
TEST(maybe, conv) {
    maybe<void> a(maybe<int>{});
    EXPECT_FALSE(a);

    maybe<void> b(maybe<int>{1});
    EXPECT_TRUE(b);

    maybe<double> c(maybe<int>{});
    EXPECT_FALSE(c);

    maybe<double> d(maybe<int>{1});
    EXPECT_TRUE(d);
    EXPECT_EQ(1., d.value());
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x210, %rsp            # imm = 0x210
movq %rdi, -0x8(%rbp)
leaq -0x14(%rbp), %rdi
movq %rdi, -0x1c8(%rbp)
callq 0x1d640
movq -0x1c8(%rbp), %rsi
leaq -0x9(%rbp), %rdi
movq %rdi, -0x1c0(%rbp)
callq 0x29660
movq -0x1c8(%rbp), %rdi
callq 0x1d710
movq -0x1c0(%rbp), %rdi
callq 0x20d30
xorb $0x1, %al
movb %al, -0x29(%rbp)
xorl %eax, %eax
movl %eax, %edx
leaq -0x28(%rbp), %rdi
movq %rdi, -0x1b8(%rbp)
leaq -0x29(%rbp), %rsi
callq 0x1d4a0
movq -0x1b8(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x1a9(%rbp)
jmp 0x2899f
movb -0x1a9(%rbp), %al
testb $0x1, %al
jne 0x289ab
jmp 0x289c1
jmp 0x28a8c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x28b16
leaq -0x48(%rbp), %rdi
callq 0x84210
jmp 0x289cc
leaq 0xa0cae(%rip), %rdx     # 0xc9681
leaq 0x9fa7b(%rip), %rcx     # 0xc8455
leaq 0x9fa6e(%rip), %r8      # 0xc844f
leaq -0x70(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x7d210
jmp 0x289f0
leaq -0x70(%rbp), %rdi
callq 0x102c0
movq %rax, %r8
leaq 0xa0188(%rip), %rdx     # 0xc8b8b
leaq -0x50(%rbp), %rdi
movl $0x1, %esi
movl $0x8d, %ecx
callq 0x80580
jmp 0x28a18
leaq -0x50(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x7d370
jmp 0x28a27
leaq -0x50(%rbp), %rdi
callq 0x80600
leaq -0x70(%rbp), %rdi
callq 0x10fc8
leaq -0x48(%rbp), %rdi
callq 0x1d500
jmp 0x28a8c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x28a7e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x28a75
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x80600
leaq -0x70(%rbp), %rdi
callq 0x10fc8
leaq -0x48(%rbp), %rdi
callq 0x1d500
jmp 0x28b16
leaq -0x28(%rbp), %rdi
callq 0x1d520
movl $0x1, -0x80(%rbp)
leaq -0x7c(%rbp), %rdi
movq %rdi, -0x1e8(%rbp)
leaq -0x80(%rbp), %rsi
callq 0x20020
movq -0x1e8(%rbp), %rsi
leaq -0x71(%rbp), %rdi
movq %rdi, -0x1e0(%rbp)
callq 0x29660
movq -0x1e8(%rbp), %rdi
callq 0x1d710
movq -0x1e0(%rbp), %rsi
xorl %eax, %eax
movl %eax, %edx
leaq -0x90(%rbp), %rdi
movq %rdi, -0x1d8(%rbp)
callq 0x29220
movq -0x1d8(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x1c9(%rbp)
jmp 0x28b05
movb -0x1c9(%rbp), %al
testb $0x1, %al
jne 0x28b11
jmp 0x28b35
jmp 0x28c27
leaq -0x28(%rbp), %rdi
callq 0x1d520
jmp 0x29167
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x28cb9
leaq -0x98(%rbp), %rdi
callq 0x84210
jmp 0x28b43
leaq 0xa0b40(%rip), %rdx     # 0xc968a
leaq 0x9f8fe(%rip), %rcx     # 0xc844f
leaq 0x9f8fd(%rip), %r8      # 0xc8455
leaq -0xc0(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x7d210
jmp 0x28b6d
leaq -0xc0(%rbp), %rdi
callq 0x102c0
movq %rax, %r8
leaq 0xa0008(%rip), %rdx     # 0xc8b8b
leaq -0xa0(%rbp), %rdi
movl $0x1, %esi
movl $0x90, %ecx
callq 0x80580
jmp 0x28b9b
leaq -0xa0(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x7d370
jmp 0x28bb0
leaq -0xa0(%rbp), %rdi
callq 0x80600
leaq -0xc0(%rbp), %rdi
callq 0x10fc8
leaq -0x98(%rbp), %rdi
callq 0x1d500
jmp 0x28c27
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x28c16
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x28c0a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0xa0(%rbp), %rdi
callq 0x80600
leaq -0xc0(%rbp), %rdi
callq 0x10fc8
leaq -0x98(%rbp), %rdi
callq 0x1d500
jmp 0x28cb9
leaq -0x90(%rbp), %rdi
callq 0x1d520
leaq -0xd8(%rbp), %rdi
movq %rdi, -0x1f0(%rbp)
callq 0x1d640
movq -0x1f0(%rbp), %rsi
leaq -0xd0(%rbp), %rdi
callq 0x29730
jmp 0x28c5b
leaq -0xd8(%rbp), %rdi
callq 0x1d710
leaq -0xd0(%rbp), %rdi
callq 0x21480
xorb $0x1, %al
movb %al, -0xe9(%rbp)
xorl %eax, %eax
movl %eax, %edx
leaq -0xe8(%rbp), %rdi
leaq -0xe9(%rbp), %rsi
callq 0x1d4a0
jmp 0x28c94
leaq -0xe8(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x1f1(%rbp)
jmp 0x28ca8
movb -0x1f1(%rbp), %al
testb $0x1, %al
jne 0x28cb4
jmp 0x28d09
jmp 0x28dfb
leaq -0x90(%rbp), %rdi
callq 0x1d520
jmp 0x29167
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x1d710
jmp 0x29167
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2915b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x28e85
leaq -0xf8(%rbp), %rdi
callq 0x84210
jmp 0x28d17
leaq 0xa727b(%rip), %rdx     # 0xcff99
leaq 0x9f730(%rip), %rcx     # 0xc8455
leaq 0x9f723(%rip), %r8      # 0xc844f
leaq -0x120(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x7d210
jmp 0x28d41
leaq -0x120(%rbp), %rdi
callq 0x102c0
movq %rax, %r8
leaq 0x9fe34(%rip), %rdx     # 0xc8b8b
leaq -0x100(%rbp), %rdi
movl $0x1, %esi
movl $0x93, %ecx
callq 0x80580
jmp 0x28d6f
leaq -0x100(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x7d370
jmp 0x28d84
leaq -0x100(%rbp), %rdi
callq 0x80600
leaq -0x120(%rbp), %rdi
callq 0x10fc8
leaq -0xf8(%rbp), %rdi
callq 0x1d500
jmp 0x28dfb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x28dea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x28dde
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x100(%rbp), %rdi
callq 0x80600
leaq -0x120(%rbp), %rdi
callq 0x10fc8
leaq -0xf8(%rbp), %rdi
callq 0x1d500
jmp 0x28e85
leaq -0xe8(%rbp), %rdi
callq 0x1d520
movl $0x1, -0x13c(%rbp)
leaq -0x138(%rbp), %rdi
leaq -0x13c(%rbp), %rsi
callq 0x20020
jmp 0x28e26
leaq -0x130(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0x29730
jmp 0x28e3b
leaq -0x138(%rbp), %rdi
callq 0x1d710
xorl %eax, %eax
movl %eax, %edx
leaq -0x150(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x29780
jmp 0x28e60
leaq -0x150(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x1f2(%rbp)
jmp 0x28e74
movb -0x1f2(%rbp), %al
testb $0x1, %al
jne 0x28e80
jmp 0x28ed5
jmp 0x28fc7
leaq -0xe8(%rbp), %rdi
callq 0x1d520
jmp 0x2915b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x138(%rbp), %rdi
callq 0x1d710
jmp 0x2915b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2914f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x29048
leaq -0x158(%rbp), %rdi
callq 0x84210
jmp 0x28ee3
leaq 0xa24dd(%rip), %rdx     # 0xcb3c7
leaq 0x9f55e(%rip), %rcx     # 0xc844f
leaq 0x9f55d(%rip), %r8      # 0xc8455
leaq -0x180(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x7d210
jmp 0x28f0d
leaq -0x180(%rbp), %rdi
callq 0x102c0
movq %rax, %r8
leaq 0x9fc68(%rip), %rdx     # 0xc8b8b
leaq -0x160(%rbp), %rdi
movl $0x1, %esi
movl $0x96, %ecx
callq 0x80580
jmp 0x28f3b
leaq -0x160(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x7d370
jmp 0x28f50
leaq -0x160(%rbp), %rdi
callq 0x80600
leaq -0x180(%rbp), %rdi
callq 0x10fc8
leaq -0x158(%rbp), %rdi
callq 0x1d500
jmp 0x28fc7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x28fb6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x28faa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x80600
leaq -0x180(%rbp), %rdi
callq 0x10fc8
leaq -0x158(%rbp), %rdi
callq 0x1d500
jmp 0x29048
leaq -0x150(%rbp), %rdi
callq 0x1d520
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, -0x198(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x29810
movq %rax, -0x200(%rbp)
jmp 0x28ff9
movq -0x200(%rbp), %r8
leaq 0x9fde1(%rip), %rsi     # 0xc8de8
leaq 0x9fddd(%rip), %rdx     # 0xc8deb
leaq -0x190(%rbp), %rdi
leaq -0x198(%rbp), %rcx
callq 0x297c0
jmp 0x29023
leaq -0x190(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x201(%rbp)
jmp 0x29037
movb -0x201(%rbp), %al
testb $0x1, %al
jne 0x29043
jmp 0x2906a
jmp 0x29116
leaq -0x150(%rbp), %rdi
callq 0x1d520
jmp 0x2914f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x29143
leaq -0x1a0(%rbp), %rdi
callq 0x84210
jmp 0x29078
leaq -0x190(%rbp), %rdi
callq 0x1d620
movq %rax, -0x210(%rbp)
jmp 0x2908d
movq -0x210(%rbp), %r8
leaq 0x9faf0(%rip), %rdx     # 0xc8b8b
leaq -0x1a8(%rbp), %rdi
movl $0x1, %esi
movl $0x97, %ecx
callq 0x80580
jmp 0x290b3
leaq -0x1a8(%rbp), %rdi
leaq -0x1a0(%rbp), %rsi
callq 0x7d370
jmp 0x290c8
leaq -0x1a8(%rbp), %rdi
callq 0x80600
leaq -0x1a0(%rbp), %rdi
callq 0x1d500
jmp 0x29116
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x29108
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x1a8(%rbp), %rdi
callq 0x80600
leaq -0x1a0(%rbp), %rdi
callq 0x1d500
jmp 0x29143
leaq -0x190(%rbp), %rdi
callq 0x1d520
leaq -0x130(%rbp), %rdi
callq 0x21450
leaq -0xd0(%rbp), %rdi
callq 0x21450
addq $0x210, %rsp            # imm = 0x210
popq %rbp
retq
leaq -0x190(%rbp), %rdi
callq 0x1d520
leaq -0x130(%rbp), %rdi
callq 0x21450
leaq -0xd0(%rbp), %rdi
callq 0x21450
movq -0x38(%rbp), %rdi
callq 0x10e00