// File: halfflat[P]tinyopt/test/test_maybe.cc
// Function: maybe_ctor_Test::TestBody()
TEST(maybe, ctor) {
    {
        maybe<count> m1;
        EXPECT_EQ(0, count::i);

        maybe<count> m2(nothing);
        EXPECT_EQ(0, count::i);

        maybe<count> m3(count{});
        EXPECT_EQ(1, count::i);
        EXPECT_EQ(1, count::m);
        EXPECT_EQ(0, count::c);

        maybe<count> m4(m3);
        EXPECT_EQ(2, count::i);
        EXPECT_EQ(1, count::m);
        EXPECT_EQ(1, count::c);
    }
    EXPECT_EQ(0, count::i);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x240, %rsp            # imm = 0x240
movq %rdi, -0x8(%rbp)
leaq -0xa(%rbp), %rdi
callq 0x29320
movl $0x0, -0x24(%rbp)
leaq 0xaaa08(%rip), %rsi     # 0xcf76e
leaq 0xa3f1f(%rip), %rdx     # 0xc8c8c
leaq 0xf2b2c(%rip), %r8      # 0x1178a0
leaq -0x20(%rbp), %rdi
leaq -0x24(%rbp), %rcx
callq 0x1d5d0
jmp 0x24d83
leaq -0x20(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x1a1(%rbp)
jmp 0x24d94
movb -0x1a1(%rbp), %al
testb $0x1, %al
jne 0x24da0
jmp 0x24dc7
jmp 0x24e58
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x257d6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x24eb7
leaq -0x40(%rbp), %rdi
callq 0x84210
jmp 0x24dd2
leaq -0x20(%rbp), %rdi
callq 0x1d620
movq %rax, -0x1b0(%rbp)
jmp 0x24de4
movq -0x1b0(%rbp), %r8
leaq 0xa3d99(%rip), %rdx     # 0xc8b8b
leaq -0x48(%rbp), %rdi
movl $0x1, %esi
movl $0x34, %ecx
callq 0x80580
jmp 0x24e07
leaq -0x48(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x7d370
jmp 0x24e16
leaq -0x48(%rbp), %rdi
callq 0x80600
leaq -0x40(%rbp), %rdi
callq 0x1d500
jmp 0x24e58
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x24e4d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x80600
leaq -0x40(%rbp), %rdi
callq 0x1d500
jmp 0x24eb7
leaq -0x20(%rbp), %rdi
callq 0x1d520
leaq -0x4a(%rbp), %rdi
callq 0x29340
movl $0x0, -0x64(%rbp)
leaq 0xaa8f6(%rip), %rsi     # 0xcf76e
leaq 0xa3e0d(%rip), %rdx     # 0xc8c8c
leaq 0xf2a1a(%rip), %r8      # 0x1178a0
leaq -0x60(%rbp), %rdi
leaq -0x64(%rbp), %rcx
callq 0x1d5d0
jmp 0x24e95
leaq -0x60(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x1b1(%rbp)
jmp 0x24ea6
movb -0x1b1(%rbp), %al
testb $0x1, %al
jne 0x24eb2
jmp 0x24ee7
jmp 0x24f7b
leaq -0x20(%rbp), %rdi
callq 0x1d520
jmp 0x257d6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x257cd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x25000
leaq -0x70(%rbp), %rdi
callq 0x84210
jmp 0x24ef2
leaq -0x60(%rbp), %rdi
callq 0x1d620
movq %rax, -0x1c0(%rbp)
jmp 0x24f04
movq -0x1c0(%rbp), %r8
leaq 0xa3c79(%rip), %rdx     # 0xc8b8b
leaq -0x78(%rbp), %rdi
movl $0x1, %esi
movl $0x37, %ecx
callq 0x80580
jmp 0x24f27
leaq -0x78(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x7d370
jmp 0x24f36
leaq -0x78(%rbp), %rdi
callq 0x80600
leaq -0x70(%rbp), %rdi
callq 0x1d500
jmp 0x24f7b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x24f6d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x80600
leaq -0x70(%rbp), %rdi
callq 0x1d500
jmp 0x25000
leaq -0x60(%rbp), %rdi
callq 0x1d520
leaq -0x7b(%rbp), %rdi
callq 0x29360
jmp 0x24f8f
leaq -0x7a(%rbp), %rdi
leaq -0x7b(%rbp), %rsi
callq 0x29380
jmp 0x24f9e
leaq -0x7b(%rbp), %rdi
callq 0x293b0
movl $0x1, -0x94(%rbp)
leaq 0xa531e(%rip), %rsi     # 0xca2d6
leaq 0xa3ccd(%rip), %rdx     # 0xc8c8c
leaq 0xf28da(%rip), %r8      # 0x1178a0
leaq -0x90(%rbp), %rdi
leaq -0x94(%rbp), %rcx
callq 0x1d5d0
jmp 0x24fdb
leaq -0x90(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x1c1(%rbp)
jmp 0x24fef
movb -0x1c1(%rbp), %al
testb $0x1, %al
jne 0x24ffb
jmp 0x2504a
jmp 0x250f6
leaq -0x60(%rbp), %rdi
callq 0x1d520
jmp 0x257cd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x7b(%rbp), %rdi
callq 0x293b0
jmp 0x257cd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x257c4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x2515b
leaq -0xa0(%rbp), %rdi
callq 0x84210
jmp 0x25058
leaq -0x90(%rbp), %rdi
callq 0x1d620
movq %rax, -0x1d0(%rbp)
jmp 0x2506d
movq -0x1d0(%rbp), %r8
leaq 0xa3b10(%rip), %rdx     # 0xc8b8b
leaq -0xa8(%rbp), %rdi
movl $0x1, %esi
movl $0x3a, %ecx
callq 0x80580
jmp 0x25093
leaq -0xa8(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x7d370
jmp 0x250a8
leaq -0xa8(%rbp), %rdi
callq 0x80600
leaq -0xa0(%rbp), %rdi
callq 0x1d500
jmp 0x250f6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x250e8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x80600
leaq -0xa0(%rbp), %rdi
callq 0x1d500
jmp 0x2515b
leaq -0x90(%rbp), %rdi
callq 0x1d520
movl $0x1, -0xbc(%rbp)
leaq 0xa51c3(%rip), %rsi     # 0xca2d6
leaq 0xa3b7b(%rip), %rdx     # 0xc8c95
leaq 0xf2787(%rip), %r8      # 0x1178a8
leaq -0xb8(%rbp), %rdi
leaq -0xbc(%rbp), %rcx
callq 0x1d5d0
jmp 0x25136
leaq -0xb8(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x1d1(%rbp)
jmp 0x2514a
movb -0x1d1(%rbp), %al
testb $0x1, %al
jne 0x25156
jmp 0x2517d
jmp 0x25229
leaq -0x90(%rbp), %rdi
callq 0x1d520
jmp 0x257c4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x2528e
leaq -0xc8(%rbp), %rdi
callq 0x84210
jmp 0x2518b
leaq -0xb8(%rbp), %rdi
callq 0x1d620
movq %rax, -0x1e0(%rbp)
jmp 0x251a0
movq -0x1e0(%rbp), %r8
leaq 0xa39dd(%rip), %rdx     # 0xc8b8b
leaq -0xd0(%rbp), %rdi
movl $0x1, %esi
movl $0x3b, %ecx
callq 0x80580
jmp 0x251c6
leaq -0xd0(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x7d370
jmp 0x251db
leaq -0xd0(%rbp), %rdi
callq 0x80600
leaq -0xc8(%rbp), %rdi
callq 0x1d500
jmp 0x25229
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x2521b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x80600
leaq -0xc8(%rbp), %rdi
callq 0x1d500
jmp 0x2528e
leaq -0xb8(%rbp), %rdi
callq 0x1d520
movl $0x0, -0xe4(%rbp)
leaq 0xaa528(%rip), %rsi     # 0xcf76e
leaq 0xa3a51(%rip), %rdx     # 0xc8c9e
leaq 0xf2650(%rip), %r8      # 0x1178a4
leaq -0xe0(%rbp), %rdi
leaq -0xe4(%rbp), %rcx
callq 0x1d5d0
jmp 0x25269
leaq -0xe0(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x1e1(%rbp)
jmp 0x2527d
movb -0x1e1(%rbp), %al
testb $0x1, %al
jne 0x25289
jmp 0x252b0
jmp 0x2535c
leaq -0xb8(%rbp), %rdi
callq 0x1d520
jmp 0x257c4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x253d3
leaq -0xf0(%rbp), %rdi
callq 0x84210
jmp 0x252be
leaq -0xe0(%rbp), %rdi
callq 0x1d620
movq %rax, -0x1f0(%rbp)
jmp 0x252d3
movq -0x1f0(%rbp), %r8
leaq 0xa38aa(%rip), %rdx     # 0xc8b8b
leaq -0xf8(%rbp), %rdi
movl $0x1, %esi
movl $0x3c, %ecx
callq 0x80580
jmp 0x252f9
leaq -0xf8(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x7d370
jmp 0x2530e
leaq -0xf8(%rbp), %rdi
callq 0x80600
leaq -0xf0(%rbp), %rdi
callq 0x1d500
jmp 0x2535c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x2534e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x80600
leaq -0xf0(%rbp), %rdi
callq 0x1d500
jmp 0x253d3
leaq -0xe0(%rbp), %rdi
callq 0x1d520
leaq -0xfa(%rbp), %rdi
leaq -0x7a(%rbp), %rsi
callq 0x293e0
jmp 0x2537a
movl $0x2, -0x114(%rbp)
leaq 0xa4f3b(%rip), %rsi     # 0xca2c6
leaq 0xa38fa(%rip), %rdx     # 0xc8c8c
leaq 0xf2507(%rip), %r8      # 0x1178a0
leaq -0x110(%rbp), %rdi
leaq -0x114(%rbp), %rcx
callq 0x1d5d0
jmp 0x253ae
leaq -0x110(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x1f1(%rbp)
jmp 0x253c2
movb -0x1f1(%rbp), %al
testb $0x1, %al
jne 0x253ce
jmp 0x25406
jmp 0x254b2
leaq -0xe0(%rbp), %rdi
callq 0x1d520
jmp 0x257c4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x257b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x25517
leaq -0x120(%rbp), %rdi
callq 0x84210
jmp 0x25414
leaq -0x110(%rbp), %rdi
callq 0x1d620
movq %rax, -0x200(%rbp)
jmp 0x25429
movq -0x200(%rbp), %r8
leaq 0xa3754(%rip), %rdx     # 0xc8b8b
leaq -0x128(%rbp), %rdi
movl $0x1, %esi
movl $0x3f, %ecx
callq 0x80580
jmp 0x2544f
leaq -0x128(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0x7d370
jmp 0x25464
leaq -0x128(%rbp), %rdi
callq 0x80600
leaq -0x120(%rbp), %rdi
callq 0x1d500
jmp 0x254b2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x254a4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x80600
leaq -0x120(%rbp), %rdi
callq 0x1d500
jmp 0x25517
leaq -0x110(%rbp), %rdi
callq 0x1d520
movl $0x1, -0x13c(%rbp)
leaq 0xa4e07(%rip), %rsi     # 0xca2d6
leaq 0xa37bf(%rip), %rdx     # 0xc8c95
leaq 0xf23cb(%rip), %r8      # 0x1178a8
leaq -0x138(%rbp), %rdi
leaq -0x13c(%rbp), %rcx
callq 0x1d5d0
jmp 0x254f2
leaq -0x138(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x201(%rbp)
jmp 0x25506
movb -0x201(%rbp), %al
testb $0x1, %al
jne 0x25512
jmp 0x25539
jmp 0x255e5
leaq -0x110(%rbp), %rdi
callq 0x1d520
jmp 0x257b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x2564a
leaq -0x148(%rbp), %rdi
callq 0x84210
jmp 0x25547
leaq -0x138(%rbp), %rdi
callq 0x1d620
movq %rax, -0x210(%rbp)
jmp 0x2555c
movq -0x210(%rbp), %r8
leaq 0xa3621(%rip), %rdx     # 0xc8b8b
leaq -0x150(%rbp), %rdi
movl $0x1, %esi
movl $0x40, %ecx
callq 0x80580
jmp 0x25582
leaq -0x150(%rbp), %rdi
leaq -0x148(%rbp), %rsi
callq 0x7d370
jmp 0x25597
leaq -0x150(%rbp), %rdi
callq 0x80600
leaq -0x148(%rbp), %rdi
callq 0x1d500
jmp 0x255e5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x255d7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x80600
leaq -0x148(%rbp), %rdi
callq 0x1d500
jmp 0x2564a
leaq -0x138(%rbp), %rdi
callq 0x1d520
movl $0x1, -0x164(%rbp)
leaq 0xa4cd4(%rip), %rsi     # 0xca2d6
leaq 0xa3695(%rip), %rdx     # 0xc8c9e
leaq 0xf2294(%rip), %r8      # 0x1178a4
leaq -0x160(%rbp), %rdi
leaq -0x164(%rbp), %rcx
callq 0x1d5d0
jmp 0x25625
leaq -0x160(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x211(%rbp)
jmp 0x25639
movb -0x211(%rbp), %al
testb $0x1, %al
jne 0x25645
jmp 0x2566c
jmp 0x2571b
leaq -0x138(%rbp), %rdi
callq 0x1d520
jmp 0x257b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x257ac
leaq -0x170(%rbp), %rdi
callq 0x84210
jmp 0x2567a
leaq -0x160(%rbp), %rdi
callq 0x1d620
movq %rax, -0x220(%rbp)
jmp 0x2568f
movq -0x220(%rbp), %r8
leaq 0xa34ee(%rip), %rdx     # 0xc8b8b
leaq -0x178(%rbp), %rdi
movl $0x1, %esi
movl $0x41, %ecx
callq 0x80580
jmp 0x256b5
leaq -0x178(%rbp), %rdi
leaq -0x170(%rbp), %rsi
callq 0x7d370
jmp 0x256ca
leaq -0x178(%rbp), %rdi
callq 0x80600
leaq -0x170(%rbp), %rdi
callq 0x1d500
jmp 0x2571b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x2570a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x80600
leaq -0x170(%rbp), %rdi
callq 0x1d500
jmp 0x257ac
leaq -0x160(%rbp), %rdi
callq 0x1d520
leaq -0xfa(%rbp), %rdi
callq 0x29430
leaq -0x7a(%rbp), %rdi
callq 0x29430
leaq -0x4a(%rbp), %rdi
callq 0x29430
leaq -0xa(%rbp), %rdi
callq 0x29430
movl $0x0, -0x18c(%rbp)
leaq 0xaa00f(%rip), %rsi     # 0xcf76e
leaq 0xa3526(%rip), %rdx     # 0xc8c8c
leaq 0xf2133(%rip), %r8      # 0x1178a0
leaq -0x188(%rbp), %rdi
movq %rdi, -0x230(%rbp)
leaq -0x18c(%rbp), %rcx
callq 0x1d5d0
movq -0x230(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x221(%rbp)
jmp 0x2579b
movb -0x221(%rbp), %al
testb $0x1, %al
jne 0x257a7
jmp 0x257f5
jmp 0x258a1
leaq -0x160(%rbp), %rdi
callq 0x1d520
leaq -0xfa(%rbp), %rdi
callq 0x29430
leaq -0x7a(%rbp), %rdi
callq 0x29430
leaq -0x4a(%rbp), %rdi
callq 0x29430
leaq -0xa(%rbp), %rdi
callq 0x29430
jmp 0x258c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x258b6
leaq -0x198(%rbp), %rdi
callq 0x84210
jmp 0x25803
leaq -0x188(%rbp), %rdi
callq 0x1d620
movq %rax, -0x238(%rbp)
jmp 0x25818
movq -0x238(%rbp), %r8
leaq 0xa3365(%rip), %rdx     # 0xc8b8b
leaq -0x1a0(%rbp), %rdi
movl $0x1, %esi
movl $0x43, %ecx
callq 0x80580
jmp 0x2583e
leaq -0x1a0(%rbp), %rdi
leaq -0x198(%rbp), %rsi
callq 0x7d370
jmp 0x25853
leaq -0x1a0(%rbp), %rdi
callq 0x80600
leaq -0x198(%rbp), %rdi
callq 0x1d500
jmp 0x258a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x25893
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x1a0(%rbp), %rdi
callq 0x80600
leaq -0x198(%rbp), %rdi
callq 0x1d500
jmp 0x258b6
leaq -0x188(%rbp), %rdi
callq 0x1d520
addq $0x240, %rsp            # imm = 0x240
popq %rbp
retq
leaq -0x188(%rbp), %rdi
callq 0x1d520
movq -0x30(%rbp), %rdi
callq 0x10e00
nopl (%rax,%rax)