// File: /workspace/github_cpp_makefile_star2_O3/iZhangHui[P]CppPrimer/CH16_TemplatesAndGenericProgramming/exercises/ex16_16_main.cc
// Function: main
int main(int argc, char const *argv[])
{
	Vec<string> svec = getVec(cin);
	print(svec);

	cout << "copy " << svec.size() << endl;
	auto svec2 = svec;
	print(svec2);

	cout << "assign" << endl;
	Vec<string> svec3;
	svec3 = svec2;
	print(svec3);

	Vec<string> v1, v2;
	Vec<string> getVec(istream &);
	v1 = v2;           // copy assignment
	v2 = getVec(cin);  // move assignment

	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xa8, %rsp
movq 0x2b41(%rip), %rsi      # 0x3fe0
leaq -0x40(%rbp), %rbx
movq %rbx, %rdi
callq 0x13af
movq %rbx, %rdi
callq 0x12cc
movq 0x2b16(%rip), %rdi      # 0x3fd0
leaq 0xb43(%rip), %rsi       # 0x2004
movl $0x5, %edx
callq 0x1100
movq -0x38(%rbp), %rsi
subq -0x40(%rbp), %rsi
sarq $0x5, %rsi
movq 0x2af2(%rip), %rdi      # 0x3fd0
callq 0x1070
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x10d0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x1030
movq %rax, %rdi
callq 0x1080
movq -0x40(%rbp), %r14
movq -0x38(%rbp), %r15
movq %r15, %rsi
subq %r14, %rsi
sarq $0x5, %rsi
leaq 0x2bac(%rip), %rdi      # 0x40d2
xorl %edx, %edx
callq 0x1a64
movq %rax, %rbx
movq %r14, %rdi
movq %r15, %rsi
movq %rax, %rdx
callq 0x1a82
movq %rax, %r14
leaq -0x98(%rbp), %rdi
movq %rbx, (%rdi)
movq %rax, 0x10(%rdi)
movq %rax, 0x8(%rdi)
callq 0x12cc
movq 0x2a71(%rip), %r15      # 0x3fd0
leaq 0xaa4(%rip), %rsi       # 0x200a
movl $0x6, %edx
movq %r15, %rdi
callq 0x1100
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x10d0
movsbl %al, %esi
movq 0x2a3f(%rip), %rdi      # 0x3fd0
callq 0x1030
movq %rax, %rdi
callq 0x1080
xorps %xmm0, %xmm0
movaps %xmm0, -0x80(%rbp)
movq $0x0, -0x70(%rbp)
movq %r14, %rsi
subq %rbx, %rsi
sarq $0x5, %rsi
leaq 0x2b14(%rip), %rdi      # 0x40d2
xorl %edx, %edx
callq 0x1a64
movq %rax, %r15
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
callq 0x1a82
leaq -0x80(%rbp), %rdi
movq %r15, (%rdi)
movq %rax, 0x10(%rdi)
movq %rax, 0x8(%rdi)
callq 0x12cc
xorps %xmm0, %xmm0
movaps %xmm0, -0x60(%rbp)
xorl %eax, %eax
movq %rax, -0x50(%rbp)
movq %rax, -0xc0(%rbp)
movaps %xmm0, -0xd0(%rbp)
leaq 0x2ac6(%rip), %rdi      # 0x40d2
xorl %esi, %esi
xorl %edx, %edx
callq 0x1a64
movq %rax, %rbx
xorl %edi, %edi
xorl %esi, %esi
movq %rax, %rdx
callq 0x1a82
movq %rax, %r14
movq %rbx, -0x60(%rbp)
movq %rax, -0x50(%rbp)
movq %rax, -0x58(%rbp)
movq 0x29a6(%rip), %rsi      # 0x3fe0
leaq -0xb0(%rbp), %rdi
callq 0x13af
movq -0xb0(%rbp), %r15
movq -0xa8(%rbp), %r13
movq -0xa0(%rbp), %r12
cmpq %r15, %r13
je 0x1689
addq $-0x10, %r13
movq -0x10(%r13), %rdi
cmpq %rdi, %r13
je 0x1679
movq (%r13), %rsi
incq %rsi
callq 0x10f0
leaq -0x20(%r13), %rax
addq $-0x10, %r13
cmpq %r15, %r13
movq %rax, %r13
jne 0x1664
testq %r15, %r15
je 0x16a4
subq %r15, %r12
movq %r15, %rdi
movq %r12, %rsi
callq 0x10f0
movq -0x60(%rbp), %rbx
movq -0x58(%rbp), %r14
cmpq %rbx, %r14
je 0x16d1
addq $-0x10, %r14
movq -0x10(%r14), %rdi
cmpq %rdi, %r14
je 0x16c1
movq (%r14), %rsi
incq %rsi
callq 0x10f0
leaq -0x20(%r14), %rax
addq $-0x10, %r14
cmpq %rbx, %r14
movq %rax, %r14
jne 0x16ad
testq %rbx, %rbx
je 0x16e5
movq -0x50(%rbp), %rsi
subq %rbx, %rsi
movq %rbx, %rdi
callq 0x10f0
movq -0x80(%rbp), %rbx
movq -0x78(%rbp), %r14
cmpq %rbx, %r14
je 0x171a
addq $-0x10, %r14
movq -0x10(%r14), %rdi
cmpq %rdi, %r14
je 0x170a
movq (%r14), %rsi
incq %rsi
callq 0x10f0
leaq -0x20(%r14), %rax
addq $-0x10, %r14
cmpq %rbx, %r14
movq %rax, %r14
jne 0x16f6
testq %rbx, %rbx
je 0x172e
movq -0x70(%rbp), %rsi
subq %rbx, %rsi
movq %rbx, %rdi
callq 0x10f0
movq -0x98(%rbp), %rbx
movq -0x90(%rbp), %r14
cmpq %rbx, %r14
je 0x1769
addq $-0x10, %r14
movq -0x10(%r14), %rdi
cmpq %rdi, %r14
je 0x1759
movq (%r14), %rsi
incq %rsi
callq 0x10f0
leaq -0x20(%r14), %rax
addq $-0x10, %r14
cmpq %rbx, %r14
movq %rax, %r14
jne 0x1745
testq %rbx, %rbx
je 0x1780
movq -0x88(%rbp), %rsi
subq %rbx, %rsi
movq %rbx, %rdi
callq 0x10f0
movq -0x40(%rbp), %rdi
movq -0x38(%rbp), %rbx
cmpq %rdi, %rbx
je 0x17bc
addq $-0x10, %rbx
movq -0x10(%rbx), %rax
cmpq %rax, %rbx
je 0x17ac
movq (%rbx), %rsi
incq %rsi
movq %rax, %rdi
callq 0x10f0
movq -0x40(%rbp), %rdi
leaq -0x20(%rbx), %rax
addq $-0x10, %rbx
cmpq %rdi, %rbx
movq %rax, %rbx
jne 0x1791
testq %rdi, %rdi
je 0x17cd
movq -0x30(%rbp), %rsi
subq %rdi, %rsi
callq 0x10f0
xorl %eax, %eax
addq $0xa8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x17e3
movq %rax, %rbx
leaq -0xd0(%rbp), %rdi
callq 0x1832
leaq -0x60(%rbp), %rdi
callq 0x1832
jmp 0x1802
jmp 0x181e
movq %rax, %rbx
leaq -0x80(%rbp), %rdi
callq 0x1832
jmp 0x1810
movq %rax, %rbx
leaq -0x98(%rbp), %rdi
callq 0x1832
jmp 0x1821
movq %rax, %rbx
leaq -0x40(%rbp), %rdi
callq 0x1832
movq %rbx, %rdi
callq 0x1150