// File: /workspace/github_cpp_makefile_star2_O1/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 %rbx
subq $0xa8, %rsp
movq 0x2b45(%rip), %rsi      # 0x3fe0
leaq -0xa8(%rbp), %rbx
movq %rbx, %rdi
callq 0x13af
movq %rbx, %rdi
callq 0x12cc
movq 0x2b17(%rip), %rdi      # 0x3fd0
leaq 0xb44(%rip), %rsi       # 0x2004
movl $0x5, %edx
callq 0x1100
movq -0xa0(%rbp), %rsi
subq -0xa8(%rbp), %rsi
sarq $0x5, %rsi
movq 0x2aed(%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
xorps %xmm0, %xmm0
movaps %xmm0, -0x90(%rbp)
movq $0x0, -0x80(%rbp)
movq -0xa8(%rbp), %rbx
movq -0xa0(%rbp), %r14
movq %r14, %rsi
subq %rbx, %rsi
sarq $0x5, %rsi
leaq 0x2b8f(%rip), %rdi      # 0x40d2
xorl %edx, %edx
callq 0x1be4
movq %rax, %r15
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
callq 0x1c02
leaq -0x90(%rbp), %rdi
movq %r15, (%rdi)
movq %rax, 0x10(%rdi)
movq %rax, 0x8(%rdi)
callq 0x12cc
movq 0x2a57(%rip), %rbx      # 0x3fd0
leaq 0xa8a(%rip), %rsi       # 0x200a
movl $0x6, %edx
movq %rbx, %rdi
callq 0x1100
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x10d0
movsbl %al, %esi
movq 0x2a25(%rip), %rdi      # 0x3fd0
callq 0x1030
movq %rax, %rdi
callq 0x1080
xorps %xmm0, %xmm0
movaps %xmm0, -0x70(%rbp)
movq $0x0, -0x60(%rbp)
movq -0x90(%rbp), %r14
movq -0x88(%rbp), %r15
movq %r15, %rsi
subq %r14, %rsi
sarq $0x5, %rsi
leaq 0x2aec(%rip), %rdi      # 0x40d2
xorl %edx, %edx
callq 0x1be4
movq %rax, %rbx
movq %r14, %rdi
movq %r15, %rsi
movq %rax, %rdx
callq 0x1c02
movq %rax, %r14
movq -0x70(%rbp), %rdi
movq -0x68(%rbp), %r15
cmpq %rdi, %r15
je 0x163a
addq $-0x10, %r15
movq -0x10(%r15), %rdi
cmpq %rdi, %r15
je 0x1626
movq (%r15), %rsi
incq %rsi
callq 0x10f0
movq -0x70(%rbp), %rdi
leaq -0x20(%r15), %rax
addq $-0x10, %r15
cmpq %rdi, %r15
movq %rax, %r15
jne 0x1612
testq %rdi, %rdi
je 0x164b
movq -0x60(%rbp), %rsi
subq %rdi, %rsi
callq 0x10f0
leaq -0x70(%rbp), %rdi
movq %rbx, (%rdi)
movq %r14, 0x10(%rdi)
movq %r14, 0x8(%rdi)
callq 0x12cc
xorps %xmm0, %xmm0
movaps %xmm0, -0x50(%rbp)
xorl %eax, %eax
movq %rax, -0x40(%rbp)
movaps %xmm0, -0x30(%rbp)
movq %rax, -0x20(%rbp)
movq -0x28(%rbp), %r14
movq %r14, %rsi
sarq $0x5, %rsi
leaq 0x2a4c(%rip), %rdi      # 0x40d2
xorl %edx, %edx
callq 0x1be4
movq %rax, %rbx
xorl %edi, %edi
movq %r14, %rsi
movq %rax, %rdx
callq 0x1c02
movq %rax, %r14
movq -0x50(%rbp), %rdi
movq -0x48(%rbp), %r15
cmpq %rdi, %r15
je 0x16d9
addq $-0x10, %r15
movq -0x10(%r15), %rdi
cmpq %rdi, %r15
je 0x16c5
movq (%r15), %rsi
incq %rsi
callq 0x10f0
movq -0x50(%rbp), %rdi
leaq -0x20(%r15), %rax
addq $-0x10, %r15
cmpq %rdi, %r15
movq %rax, %r15
jne 0x16b1
testq %rdi, %rdi
je 0x16ea
movq -0x40(%rbp), %rsi
subq %rdi, %rsi
callq 0x10f0
movq %rbx, -0x50(%rbp)
movq %r14, -0x40(%rbp)
movq %r14, -0x48(%rbp)
movq 0x28e3(%rip), %rsi      # 0x3fe0
leaq -0xc0(%rbp), %rdi
callq 0x13af
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rbx
cmpq %rdi, %rbx
je 0x1742
addq $-0x10, %rbx
movq -0x10(%rbx), %rdi
cmpq %rdi, %rbx
je 0x172e
movq (%rbx), %rsi
incq %rsi
callq 0x10f0
movq -0x30(%rbp), %rdi
leaq -0x20(%rbx), %rax
addq $-0x10, %rbx
cmpq %rdi, %rbx
movq %rax, %rbx
jne 0x171a
testq %rdi, %rdi
je 0x1753
movq -0x20(%rbp), %rsi
subq %rdi, %rsi
callq 0x10f0
movq -0xc0(%rbp), %rax
movq %rax, -0x30(%rbp)
movups -0xb8(%rbp), %xmm0
movups %xmm0, -0x28(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, -0xc0(%rbp)
movq $0x0, -0xb0(%rbp)
movq -0xb8(%rbp), %rbx
testq %rbx, %rbx
je 0x17bb
addq $-0x10, %rbx
movq -0x10(%rbx), %rdi
cmpq %rdi, %rbx
je 0x17a2
movq (%rbx), %rsi
incq %rsi
callq 0x10f0
movq -0xc0(%rbp), %rdi
leaq -0x20(%rbx), %rax
addq $-0x10, %rbx
cmpq %rdi, %rbx
movq %rax, %rbx
jne 0x178e
jmp 0x17bd
xorl %edi, %edi
testq %rdi, %rdi
je 0x17d1
movq -0xb0(%rbp), %rsi
subq %rdi, %rsi
callq 0x10f0
movq -0x30(%rbp), %rdi
movq -0x28(%rbp), %rbx
cmpq %rdi, %rbx
je 0x180a
addq $-0x10, %rbx
movq -0x10(%rbx), %rdi
cmpq %rdi, %rbx
je 0x17f6
movq (%rbx), %rsi
incq %rsi
callq 0x10f0
movq -0x30(%rbp), %rdi
leaq -0x20(%rbx), %rax
addq $-0x10, %rbx
cmpq %rdi, %rbx
movq %rax, %rbx
jne 0x17e2
testq %rdi, %rdi
je 0x181b
movq -0x20(%rbp), %rsi
subq %rdi, %rsi
callq 0x10f0
movq -0x50(%rbp), %rdi
movq -0x48(%rbp), %rbx
cmpq %rdi, %rbx
je 0x1854
addq $-0x10, %rbx
movq -0x10(%rbx), %rdi
cmpq %rdi, %rbx
je 0x1840
movq (%rbx), %rsi
incq %rsi
callq 0x10f0
movq -0x50(%rbp), %rdi
leaq -0x20(%rbx), %rax
addq $-0x10, %rbx
cmpq %rdi, %rbx
movq %rax, %rbx
jne 0x182c
testq %rdi, %rdi
je 0x1865
movq -0x40(%rbp), %rsi
subq %rdi, %rsi
callq 0x10f0
movq -0x70(%rbp), %rdi
movq -0x68(%rbp), %rbx
cmpq %rdi, %rbx
je 0x189e
addq $-0x10, %rbx
movq -0x10(%rbx), %rdi
cmpq %rdi, %rbx
je 0x188a
movq (%rbx), %rsi
incq %rsi
callq 0x10f0
movq -0x70(%rbp), %rdi
leaq -0x20(%rbx), %rax
addq $-0x10, %rbx
cmpq %rdi, %rbx
movq %rax, %rbx
jne 0x1876
testq %rdi, %rdi
je 0x18af
movq -0x60(%rbp), %rsi
subq %rdi, %rsi
callq 0x10f0
movq -0x90(%rbp), %rdi
movq -0x88(%rbp), %rbx
cmpq %rdi, %rbx
je 0x18f1
addq $-0x10, %rbx
movq -0x10(%rbx), %rdi
cmpq %rdi, %rbx
je 0x18da
movq (%rbx), %rsi
incq %rsi
callq 0x10f0
movq -0x90(%rbp), %rdi
leaq -0x20(%rbx), %rax
addq $-0x10, %rbx
cmpq %rdi, %rbx
movq %rax, %rbx
jne 0x18c6
testq %rdi, %rdi
je 0x1902
movq -0x80(%rbp), %rsi
subq %rdi, %rsi
callq 0x10f0
movq -0xa8(%rbp), %rdi
movq -0xa0(%rbp), %rbx
cmpq %rdi, %rbx
je 0x1944
addq $-0x10, %rbx
movq -0x10(%rbx), %rdi
cmpq %rdi, %rbx
je 0x192d
movq (%rbx), %rsi
incq %rsi
callq 0x10f0
movq -0xa8(%rbp), %rdi
leaq -0x20(%rbx), %rax
addq $-0x10, %rbx
cmpq %rdi, %rbx
movq %rax, %rbx
jne 0x1919
testq %rdi, %rdi
je 0x1958
movq -0x98(%rbp), %rsi
subq %rdi, %rsi
callq 0x10f0
xorl %eax, %eax
addq $0xa8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
jmp 0x196a
movq %rax, %rbx
leaq -0x30(%rbp), %rdi
callq 0x19ba
leaq -0x50(%rbp), %rdi
callq 0x19ba
jmp 0x1986
jmp 0x19a2
movq %rax, %rbx
leaq -0x70(%rbp), %rdi
callq 0x19ba
jmp 0x1994
movq %rax, %rbx
leaq -0x90(%rbp), %rdi
callq 0x19ba
jmp 0x19a5
movq %rax, %rbx
leaq -0xa8(%rbp), %rdi
callq 0x19ba
movq %rbx, %rdi
callq 0x1150
nop