// File: halfflat[P]tinyopt/test/test_maybe.cc
// Function: maybe_noexcept_Test::TestBody()
TEST(maybe, noexcept) {
    struct nontrivial {
        nontrivial() { throw 0; }
        nontrivial(const nontrivial&) { throw 0; }
        nontrivial(nontrivial&&) { throw 0; }
    };

    EXPECT_TRUE(noexcept(maybe<void>()));
    EXPECT_TRUE(noexcept(maybe<void>(1)));

    EXPECT_TRUE(noexcept(maybe<nontrivial>()));
    EXPECT_TRUE(noexcept(maybe<nontrivial>(nothing)));
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x180, %rsp            # imm = 0x180
movq %rdi, -0x8(%rbp)
movb $0x1, -0x19(%rbp)
xorl %eax, %eax
movl %eax, %edx
leaq -0x18(%rbp), %rdi
movq %rdi, -0x148(%rbp)
leaq -0x19(%rbp), %rsi
callq 0x1d4a0
movq -0x148(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x139(%rbp)
jmp 0x2480f
movb -0x139(%rbp), %al
testb $0x1, %al
jne 0x2481b
jmp 0x24831
jmp 0x248f9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x24943
leaq -0x38(%rbp), %rdi
callq 0x84210
jmp 0x2483c
leaq 0xa43d5(%rip), %rdx     # 0xc8c18
leaq 0xa3c05(%rip), %rcx     # 0xc844f
leaq 0xa3c04(%rip), %r8      # 0xc8455
leaq -0x60(%rbp), %rdi
leaq -0x18(%rbp), %rsi
callq 0x7d210
jmp 0x24860
leaq -0x60(%rbp), %rdi
callq 0x102c0
movq %rax, %r8
leaq 0xa4318(%rip), %rdx     # 0xc8b8b
leaq -0x40(%rbp), %rdi
movl $0x1, %esi
movl $0x18, %ecx
callq 0x80580
jmp 0x24888
leaq -0x40(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x7d370
jmp 0x24897
leaq -0x40(%rbp), %rdi
callq 0x80600
leaq -0x60(%rbp), %rdi
callq 0x10fc8
leaq -0x38(%rbp), %rdi
callq 0x1d500
jmp 0x248f9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x248ee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x248e5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x80600
leaq -0x60(%rbp), %rdi
callq 0x10fc8
leaq -0x38(%rbp), %rdi
callq 0x1d500
jmp 0x24943
leaq -0x18(%rbp), %rdi
callq 0x1d520
movb $0x1, -0x71(%rbp)
xorl %eax, %eax
movl %eax, %edx
leaq -0x70(%rbp), %rdi
movq %rdi, -0x158(%rbp)
leaq -0x71(%rbp), %rsi
callq 0x1d4a0
movq -0x158(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x149(%rbp)
jmp 0x24932
movb -0x149(%rbp), %al
testb $0x1, %al
jne 0x2493e
jmp 0x24962
jmp 0x24a42
leaq -0x18(%rbp), %rdi
callq 0x1d520
jmp 0x24d2b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x24a95
leaq -0x80(%rbp), %rdi
callq 0x84210
jmp 0x2496d
leaq 0xa42bc(%rip), %rdx     # 0xc8c30
leaq 0xa3ad4(%rip), %rcx     # 0xc844f
leaq 0xa3ad3(%rip), %r8      # 0xc8455
leaq -0xa8(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x7d210
jmp 0x24994
leaq -0xa8(%rbp), %rdi
callq 0x102c0
movq %rax, %r8
leaq 0xa41e1(%rip), %rdx     # 0xc8b8b
leaq -0x88(%rbp), %rdi
movl $0x1, %esi
movl $0x19, %ecx
callq 0x80580
jmp 0x249c2
leaq -0x88(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x7d370
jmp 0x249d4
leaq -0x88(%rbp), %rdi
callq 0x80600
leaq -0xa8(%rbp), %rdi
callq 0x10fc8
leaq -0x80(%rbp), %rdi
callq 0x1d500
jmp 0x24a42
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x24a37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x24a2b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x80600
leaq -0xa8(%rbp), %rdi
callq 0x10fc8
leaq -0x80(%rbp), %rdi
callq 0x1d500
jmp 0x24a95
leaq -0x70(%rbp), %rdi
callq 0x1d520
movb $0x1, -0xb9(%rbp)
xorl %eax, %eax
movl %eax, %edx
leaq -0xb8(%rbp), %rdi
movq %rdi, -0x168(%rbp)
leaq -0xb9(%rbp), %rsi
callq 0x1d4a0
movq -0x168(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x159(%rbp)
jmp 0x24a84
movb -0x159(%rbp), %al
testb $0x1, %al
jne 0x24a90
jmp 0x24ab4
jmp 0x24ba3
leaq -0x70(%rbp), %rdi
callq 0x1d520
jmp 0x24d2b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x24bf9
leaq -0xc8(%rbp), %rdi
callq 0x84210
jmp 0x24ac2
leaq 0xa4180(%rip), %rdx     # 0xc8c49
leaq 0xa397f(%rip), %rcx     # 0xc844f
leaq 0xa397e(%rip), %r8      # 0xc8455
leaq -0xf0(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x7d210
jmp 0x24aec
leaq -0xf0(%rbp), %rdi
callq 0x102c0
movq %rax, %r8
leaq 0xa4089(%rip), %rdx     # 0xc8b8b
leaq -0xd0(%rbp), %rdi
movl $0x1, %esi
movl $0x1b, %ecx
callq 0x80580
jmp 0x24b1a
leaq -0xd0(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x7d370
jmp 0x24b2f
leaq -0xd0(%rbp), %rdi
callq 0x80600
leaq -0xf0(%rbp), %rdi
callq 0x10fc8
leaq -0xc8(%rbp), %rdi
callq 0x1d500
jmp 0x24ba3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x24b95
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x24b89
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x80600
leaq -0xf0(%rbp), %rdi
callq 0x10fc8
leaq -0xc8(%rbp), %rdi
callq 0x1d500
jmp 0x24bf9
leaq -0xb8(%rbp), %rdi
callq 0x1d520
movb $0x1, -0x101(%rbp)
xorl %eax, %eax
movl %eax, %edx
leaq -0x100(%rbp), %rdi
movq %rdi, -0x178(%rbp)
leaq -0x101(%rbp), %rsi
callq 0x1d4a0
movq -0x178(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x169(%rbp)
jmp 0x24be8
movb -0x169(%rbp), %al
testb $0x1, %al
jne 0x24bf4
jmp 0x24c1b
jmp 0x24d0a
leaq -0xb8(%rbp), %rdi
callq 0x1d520
jmp 0x24d2b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x24d1f
leaq -0x110(%rbp), %rdi
callq 0x84210
jmp 0x24c29
leaq 0xa4037(%rip), %rdx     # 0xc8c67
leaq 0xa3818(%rip), %rcx     # 0xc844f
leaq 0xa3817(%rip), %r8      # 0xc8455
leaq -0x138(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x7d210
jmp 0x24c53
leaq -0x138(%rbp), %rdi
callq 0x102c0
movq %rax, %r8
leaq 0xa3f22(%rip), %rdx     # 0xc8b8b
leaq -0x118(%rbp), %rdi
movl $0x1, %esi
movl $0x1c, %ecx
callq 0x80580
jmp 0x24c81
leaq -0x118(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x7d370
jmp 0x24c96
leaq -0x118(%rbp), %rdi
callq 0x80600
leaq -0x138(%rbp), %rdi
callq 0x10fc8
leaq -0x110(%rbp), %rdi
callq 0x1d500
jmp 0x24d0a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x24cfc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
jmp 0x24cf0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x118(%rbp), %rdi
callq 0x80600
leaq -0x138(%rbp), %rdi
callq 0x10fc8
leaq -0x110(%rbp), %rdi
callq 0x1d500
jmp 0x24d1f
leaq -0x100(%rbp), %rdi
callq 0x1d520
addq $0x180, %rsp            # imm = 0x180
popq %rbp
retq
leaq -0x100(%rbp), %rdi
callq 0x1d520
movq -0x28(%rbp), %rdi
callq 0x10e00
nopw %cs:(%rax,%rax)