// File: iZhangHui[P]CppPrimer/CH16_TemplatesAndGenericProgramming/exercises/ex16_19_20.cc
// Function: main
int main(int argc, char const *argv[])
{
	std::vector<std::string> v = {"hello", "c++11", "template"};
	std::list<int> l = {1, 2, 3, 4};

	print1(v, std::cout);
	print2(l, std::cout);

	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x180, %rsp            # imm = 0x180
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movb $0x1, -0xb7(%rbp)
leaq -0x98(%rbp), %rax
movq %rax, -0x108(%rbp)
movq %rax, -0xa0(%rbp)
leaq -0xa1(%rbp), %rdi
movq %rdi, -0x100(%rbp)
callq 0x1180
movq -0x108(%rbp), %rdi
movq -0x100(%rbp), %rdx
leaq 0x1cd7(%rip), %rsi      # 0x3004
callq 0x1120
jmp 0x1334
leaq -0x78(%rbp), %rax
movq %rax, -0x118(%rbp)
movq %rax, -0xa0(%rbp)
leaq -0xb5(%rbp), %rdi
movq %rdi, -0x110(%rbp)
callq 0x1180
movq -0x118(%rbp), %rdi
movq -0x110(%rbp), %rdx
leaq 0x1c9c(%rip), %rsi      # 0x300a
callq 0x1120
jmp 0x1375
leaq -0x58(%rbp), %rax
movq %rax, -0x128(%rbp)
movq %rax, -0xa0(%rbp)
leaq -0xb6(%rbp), %rdi
movq %rdi, -0x120(%rbp)
callq 0x1180
movq -0x128(%rbp), %rdi
movq -0x120(%rbp), %rdx
leaq 0x1c61(%rip), %rsi      # 0x3010
callq 0x1120
jmp 0x13b6
movb $0x0, -0xb7(%rbp)
leaq -0x98(%rbp), %rax
movq %rax, -0x38(%rbp)
movq $0x3, -0x30(%rbp)
leaq -0xb8(%rbp), %rdi
movq %rdi, -0x130(%rbp)
callq 0x16d0
movq -0x130(%rbp), %rcx
movq -0x38(%rbp), %rsi
movq -0x30(%rbp), %rdx
leaq -0x28(%rbp), %rdi
callq 0x16f0
jmp 0x13fd
leaq -0xb8(%rbp), %rdi
callq 0x1770
leaq -0x98(%rbp), %rax
movq %rax, -0x140(%rbp)
addq $0x60, %rax
movq %rax, -0x138(%rbp)
movq -0x138(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x148(%rbp)
callq 0x1090
movq -0x140(%rbp), %rcx
movq -0x148(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x138(%rbp)
jne 0x1422
leaq -0xb6(%rbp), %rdi
callq 0x1110
leaq -0xb5(%rbp), %rdi
callq 0x1110
leaq -0xa1(%rbp), %rdi
callq 0x1110
movl $0x1, -0xf0(%rbp)
movl $0x2, -0xec(%rbp)
movl $0x3, -0xe8(%rbp)
movl $0x4, -0xe4(%rbp)
leaq -0xf0(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq $0x4, -0xd8(%rbp)
leaq -0xf1(%rbp), %rdi
movq %rdi, -0x150(%rbp)
callq 0x1790
movq -0x150(%rbp), %rcx
movq -0xe0(%rbp), %rsi
movq -0xd8(%rbp), %rdx
leaq -0xd0(%rbp), %rdi
callq 0x17b0
jmp 0x14ee
leaq -0xf1(%rbp), %rdi
callq 0x1860
movq 0x4ad7(%rip), %rsi      # 0x5fd8
leaq -0x28(%rbp), %rdi
callq 0x1880
jmp 0x150c
movq 0x4ac5(%rip), %rsi      # 0x5fd8
leaq -0xd0(%rbp), %rdi
callq 0x1910
jmp 0x1521
movl $0x0, -0x4(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x19a0
leaq -0x28(%rbp), %rdi
callq 0x19c0
movl -0x4(%rbp), %eax
addq $0x180, %rsp            # imm = 0x180
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x160d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x1601
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x15f5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x1770
leaq -0x98(%rbp), %rax
movq %rax, -0x160(%rbp)
addq $0x60, %rax
movq %rax, -0x158(%rbp)
movq -0x158(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x168(%rbp)
callq 0x1090
movq -0x160(%rbp), %rcx
movq -0x168(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x158(%rbp)
jne 0x15c2
jmp 0x15f5
leaq -0xb6(%rbp), %rdi
callq 0x1110
leaq -0xb5(%rbp), %rdi
callq 0x1110
leaq -0xa1(%rbp), %rdi
callq 0x1110
testb $0x1, -0xb7(%rbp)
jne 0x1624
jmp 0x1671
movq -0xa0(%rbp), %rax
leaq -0x98(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0x170(%rbp)
je 0x166f
movq -0x170(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x178(%rbp)
callq 0x1090
movq -0x178(%rbp), %rax
leaq -0x98(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0x170(%rbp)
jne 0x163e
jmp 0x1671
jmp 0x16ba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0xf1(%rbp), %rdi
callq 0x1860
jmp 0x16b1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x19a0
leaq -0x28(%rbp), %rdi
callq 0x19c0
movq -0xb0(%rbp), %rdi
callq 0x1170
nopw %cs:(%rax,%rax)