// File: /workspace/github_cpp_makefile_star2_O1/iZhangHui[P]CppPrimer/CH06_Functions/examples/errMsg_initList.cc
// Function: main
int main()
{
	string expected = "description", actual = "some other case";
	initializer_list<int> li = {0,1,2,3};

	// expected, actual are strings 
	if (expected != actual)
		error_msg({"functionX", expected, actual});
	else
		error_msg({"functionX", "okay"});

	// expected, actual are strings 
	if (expected != actual)
		error_msg(ErrCode(42), {"functionX", expected, actual});
	else
		error_msg(ErrCode(0), {"functionX", "okay"});
	
	// can pass an empty list, calls second version of error_msg
	error_msg({}); // prints blank line

	// call function that list initializes its return value
	// results is a vector<string>
	auto results = functionX();
	for (auto i : results) 
		cout << i << " ";
	cout << endl;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xb8, %rsp
leaq -0x58(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x16dd(%rip), %rsi      # 0x4007
leaq 0x16e1(%rip), %rdx      # 0x4012
leaq -0x68(%rbp), %rdi
callq 0x3148
leaq -0x38(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x16ca(%rip), %rsi      # 0x4013
leaq 0x16d2(%rip), %rdx      # 0x4022
leaq -0x48(%rbp), %rdi
callq 0x3148
movq -0x60(%rbp), %rdx
cmpq -0x40(%rbp), %rdx
jne 0x2981
testq %rdx, %rdx
je 0x2a2b
movq -0x48(%rbp), %rsi
movq -0x68(%rbp), %rdi
callq 0x2120
testl %eax, %eax
je 0x2a2b
leaq -0xb8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq -0xc8(%rbp), %r14
leaq 0x1689(%rip), %rsi      # 0x4023
leaq 0x168b(%rip), %rdx      # 0x402c
movq %r14, %rdi
callq 0x3148
leaq -0xa8(%rbp), %r14
leaq -0x98(%rbp), %rax
movq %rax, -0x10(%rax)
movq -0x68(%rbp), %rsi
movq -0x60(%rbp), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0x30ae
leaq -0x88(%rbp), %r14
leaq -0x78(%rbp), %rbx
movq %rbx, -0x10(%rbx)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0x30ae
leaq -0xc8(%rbp), %rdi
movl $0x3, %esi
callq 0x2574
movq $-0x60, %r14
movq -0x10(%rbx), %rdi
cmpq %rdi, %rbx
je 0x2a1c
movq (%rbx), %rsi
incq %rsi
callq 0x2110
addq $-0x20, %rbx
addq $0x20, %r14
jne 0x2a08
jmp 0x2ab1
leaq -0xb8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x15e6(%rip), %rsi      # 0x4023
leaq 0x15e8(%rip), %rdx      # 0x402c
leaq -0xc8(%rbp), %r15
movq %r15, %rdi
callq 0x3148
leaq -0xa8(%rbp), %r14
leaq -0x98(%rbp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x15c1(%rip), %rsi      # 0x402d
leaq 0x15be(%rip), %rdx      # 0x4031
movq %r14, %rdi
callq 0x3148
leaq -0xc8(%rbp), %rdi
movl $0x2, %esi
callq 0x2574
movq $-0x40, %r14
movq -0x10(%rbx), %rdi
cmpq %rdi, %rbx
je 0x2aa7
movq (%rbx), %rsi
incq %rsi
callq 0x2110
addq $-0x20, %rbx
addq $0x20, %r14
jne 0x2a93
movq -0x60(%rbp), %rdx
cmpq -0x40(%rbp), %rdx
jne 0x2ad9
testq %rdx, %rdx
je 0x2b88
movq -0x48(%rbp), %rsi
movq -0x68(%rbp), %rdi
callq 0x2120
testl %eax, %eax
je 0x2b88
leaq -0xb8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq -0xc8(%rbp), %r14
leaq 0x1531(%rip), %rsi      # 0x4023
leaq 0x1533(%rip), %rdx      # 0x402c
movq %r14, %rdi
callq 0x3148
leaq -0xa8(%rbp), %r14
leaq -0x98(%rbp), %rax
movq %rax, -0x10(%rax)
movq -0x68(%rbp), %rsi
movq -0x60(%rbp), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0x30ae
leaq -0x88(%rbp), %r14
leaq -0x78(%rbp), %rbx
movq %rbx, -0x10(%rbx)
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0x30ae
leaq -0xc8(%rbp), %rsi
movl $0x3, %edx
movl $0x2a, %edi
callq 0x246c
movq $-0x60, %r14
movq -0x10(%rbx), %rdi
cmpq %rdi, %rbx
je 0x2b79
movq (%rbx), %rsi
incq %rsi
callq 0x2110
addq $-0x20, %rbx
addq $0x20, %r14
jne 0x2b65
jmp 0x2c10
leaq -0xb8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x1489(%rip), %rsi      # 0x4023
leaq 0x148b(%rip), %rdx      # 0x402c
leaq -0xc8(%rbp), %r15
movq %r15, %rdi
callq 0x3148
leaq -0xa8(%rbp), %r14
leaq -0x98(%rbp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x1464(%rip), %rsi      # 0x402d
leaq 0x1461(%rip), %rdx      # 0x4031
movq %r14, %rdi
callq 0x3148
leaq -0xc8(%rbp), %rsi
movl $0x2, %edx
xorl %edi, %edi
callq 0x246c
movq $-0x40, %r14
movq -0x10(%rbx), %rdi
cmpq %rdi, %rbx
je 0x2c06
movq (%rbx), %rsi
incq %rsi
callq 0x2110
addq $-0x20, %rbx
addq $0x20, %r14
jne 0x2bf2
xorl %edi, %edi
xorl %esi, %esi
callq 0x2574
leaq -0xe0(%rbp), %rdi
callq 0x25fd
movq -0xe0(%rbp), %r12
movq -0xd8(%rbp), %rbx
cmpq %rbx, %r12
je 0x2cb6
leaq -0xb8(%rbp), %r13
movq 0x3392(%rip), %r14      # 0x5fd8
leaq 0x13b8(%rip), %r15      # 0x4005
movq %r13, -0xc8(%rbp)
movq (%r12), %rsi
movq 0x8(%r12), %rdx
addq %rsi, %rdx
leaq -0xc8(%rbp), %rdi
callq 0x30ae
movq -0xc8(%rbp), %rsi
movq -0xc0(%rbp), %rdx
movq %r14, %rdi
callq 0x2130
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x2130
movq -0xc8(%rbp), %rdi
cmpq %r13, %rdi
je 0x2cad
movq -0xb8(%rbp), %rsi
incq %rsi
callq 0x2110
addq $0x20, %r12
cmpq %rbx, %r12
jne 0x2c4d
movq 0x331b(%rip), %rdi      # 0x5fd8
movq (%rdi), %rax
addq -0x18(%rax), %rdi
movl $0xa, %esi
callq 0x20f0
movsbl %al, %esi
movq 0x3300(%rip), %rdi      # 0x5fd8
callq 0x2030
movq %rax, %rdi
callq 0x20a0
leaq -0xe0(%rbp), %rdi
callq 0x3036
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
leaq -0x58(%rbp), %rbx
je 0x2d0e
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x2110
movq -0x68(%rbp), %rdi
cmpq %rbx, %rdi
je 0x2d23
movq -0x58(%rbp), %rsi
incq %rsi
callq 0x2110
xorl %eax, %eax
addq $0xb8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq -0x88(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x22f2
movb $0x1, %al
jmp 0x2d60
movq %rax, %rbx
xorl %eax, %eax
jmp 0x2d60
movq %rax, %rbx
xorl %eax, %eax
movq %r15, %r14
cmpq %r14, %r15
sete %cl
orb %al, %cl
jne 0x2f02
addq $-0x10, %r14
leaq -0xc8(%rbp), %r15
movq -0x10(%r14), %rdi
cmpq %rdi, %r14
je 0x2d8d
movq (%r14), %rsi
incq %rsi
callq 0x2110
leaq -0x20(%r14), %rax
addq $-0x10, %r14
cmpq %r15, %r14
movq %rax, %r14
jne 0x2d79
jmp 0x2f02
movq %rax, %rbx
leaq -0x88(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x227e
movb $0x1, %al
jmp 0x2dcb
movq %rax, %rbx
xorl %eax, %eax
jmp 0x2dcb
movq %rax, %rbx
xorl %eax, %eax
movq %r15, %r14
cmpq %r14, %r15
sete %cl
orb %al, %cl
jne 0x2f02
addq $-0x10, %r14
leaq -0xc8(%rbp), %r15
movq -0x10(%r14), %rdi
cmpq %rdi, %r14
je 0x2df8
movq (%r14), %rsi
incq %rsi
callq 0x2110
leaq -0x20(%r14), %rax
addq $-0x10, %r14
cmpq %r15, %r14
movq %rax, %r14
jne 0x2de4
jmp 0x2f02
movq %rax, %rbx
leaq -0x68(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x22b8
movb $0x1, %al
jmp 0x2e52
movq %rax, %rbx
leaq -0x68(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x2244
movb $0x1, %al
jmp 0x2e96
jmp 0x2e3d
movq %rax, %rbx
jmp 0x2f02
movq %rax, %rbx
jmp 0x2f1b
movq %rax, %rbx
xorl %eax, %eax
leaq -0xc8(%rbp), %r15
cmpq %r14, %r15
sete %cl
orb %al, %cl
jne 0x2f02
addq $-0x10, %r14
movq -0x10(%r14), %rdi
cmpq %rdi, %r14
je 0x2e7f
movq (%r14), %rsi
incq %rsi
callq 0x2110
leaq -0x20(%r14), %rax
addq $-0x10, %r14
cmpq %r15, %r14
movq %rax, %r14
jne 0x2e6b
jmp 0x2f02
movq %rax, %rbx
xorl %eax, %eax
leaq -0xc8(%rbp), %r15
cmpq %r14, %r15
sete %cl
orb %al, %cl
jne 0x2f02
addq $-0x10, %r14
movq -0x10(%r14), %rdi
cmpq %rdi, %r14
je 0x2ebf
movq (%r14), %rsi
incq %rsi
callq 0x2110
leaq -0x20(%r14), %rax
addq $-0x10, %r14
cmpq %r15, %r14
movq %rax, %r14
jne 0x2eab
jmp 0x2f02
jmp 0x2ed3
movq %rax, %rbx
jmp 0x2ef6
movq %rax, %rbx
movq -0xc8(%rbp), %rdi
cmpq %r13, %rdi
je 0x2ef6
movq -0xb8(%rbp), %rsi
incq %rsi
callq 0x2110
leaq -0xe0(%rbp), %rdi
callq 0x3036
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x2f1b
movq -0x38(%rbp), %rsi
incq %rsi
callq 0x2110
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x2f34
movq -0x58(%rbp), %rsi
incq %rsi
callq 0x2110
movq %rbx, %rdi
callq 0x21a0