// File: /workspace/github_cpp_makefile_star2_O2/iZhangHui[P]CppPrimer/CH16_TemplatesAndGenericProgramming/examples/debug.cc
// Function: main
int main()
{
	vector<int> v = {1,2,3,4,5,6,7,8,9};
	string s("hi");
	cout << debug_rep(v) << endl;
	cout << debug_rep(s) << endl;
	cout << debug_rep("hi") << endl;
	cout << debug_rep(&v[0]) << endl;
	cout << debug_rep(&s) << endl;
	const string *sp = &s;
	cout << debug_rep(sp) << endl;

	char carr[] = "bye";            // calls pointer version if no overloads
	cout << debug_rep(carr) << endl;
	vector<string> authors = {"Proust", "Shakespeare", "Barth"};
	vector<const char*> authors2 = {"Proust", "Shakespeare", "Barth"};
	cout << debug_rep(authors) << endl;
	cout << debug_rep(authors2) << endl;
	cout << debug_rep(s) << endl;
	s += "more stuff";
	cout << debug_rep(s) << endl;
	s += "\\escape\"and quotes";
	cout << debug_rep(s) << endl;

	cout << debug_rep("hi world!") << endl; // calls debug_rep(T*)

	s = "hi";
	const char *cp = "bye";
	char arr[] = "world";

	cout << debug_rep(s) << endl;  // calls specialization debug_rep(const string&
	cout << debug_rep(cp) << endl; // calls specialization debug_rep(const char*
	cout << debug_rep(arr) << endl;// calls specialization debug_rep(char*
	cout << debug_rep(&s) << endl; // calls template debug_rep(T*)

	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0xd8, %rsp
movups 0x1c49(%rip), %xmm0     # 0x40d8
leaq -0x80(%rbp), %rsi
movaps %xmm0, 0x10(%rsi)
movups 0x1c2a(%rip), %xmm0     # 0x40c8
movaps %xmm0, (%rsi)
movl $0x9, 0x20(%rsi)
leaq -0xd8(%rbp), %rdi
pushq $0x9
popq %rdx
leaq -0xa0(%rbp), %rcx
callq 0x2adc
leaq 0x1b50(%rip), %rsi      # 0x4015
leaq -0xa0(%rbp), %rdi
leaq -0x80(%rbp), %rdx
callq 0x2060
leaq -0x80(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0x2b12
movq 0x3aec(%rip), %rdi      # 0x5fd8
leaq -0x80(%rbp), %rsi
callq 0x20e0
movq %rax, %rdi
callq 0x2090
leaq -0x80(%rbp), %rdi
callq 0x2080
leaq -0x80(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x234c
movq 0x3abb(%rip), %rdi      # 0x5fd8
leaq -0x80(%rbp), %rsi
callq 0x20e0
movq %rax, %rdi
callq 0x2090
leaq -0x80(%rbp), %rdi
callq 0x2080
leaq 0x1ad7(%rip), %rsi      # 0x4015
leaq -0x80(%rbp), %rdi
callq 0x2426
movq 0x3a8a(%rip), %rdi      # 0x5fd8
leaq -0x80(%rbp), %rsi
callq 0x20e0
movq %rax, %rdi
callq 0x2090
leaq -0x80(%rbp), %rdi
callq 0x2080
movq -0xd8(%rbp), %rsi
leaq -0x80(%rbp), %rdi
callq 0x2bd5
movq 0x3a59(%rip), %rdi      # 0x5fd8
leaq -0x80(%rbp), %rsi
callq 0x20e0
movq %rax, %rdi
callq 0x2090
leaq -0x80(%rbp), %rdi
callq 0x2080
leaq -0x80(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x2cda
movq 0x3a28(%rip), %rdi      # 0x5fd8
leaq -0x80(%rbp), %rsi
callq 0x20e0
movq %rax, %rdi
callq 0x2090
leaq -0x80(%rbp), %rdi
callq 0x2080
leaq -0x80(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x2ddf
movq 0x39f7(%rip), %rdi      # 0x5fd8
leaq -0x80(%rbp), %rsi
callq 0x20e0
movq %rax, %rdi
callq 0x2090
leaq -0x80(%rbp), %rdi
callq 0x2080
leaq -0xa4(%rbp), %rsi
movl $0x657962, (%rsi)       # imm = 0x657962
leaq -0x80(%rbp), %rdi
callq 0x23d4
movq 0x39c0(%rip), %rdi      # 0x5fd8
leaq -0x80(%rbp), %rsi
callq 0x20e0
movq %rax, %rdi
callq 0x2090
leaq -0x80(%rbp), %rdi
callq 0x2080
leaq 0x19df(%rip), %rsi      # 0x4018
leaq -0x80(%rbp), %r14
leaq -0xc0(%rbp), %rdx
movq %r14, %rdi
callq 0x2060
leaq -0x60(%rbp), %r15
leaq 0x19c8(%rip), %rsi      # 0x401f
leaq -0x20(%rbp), %rdx
movq %r15, %rdi
callq 0x2060
leaq -0x40(%rbp), %r15
leaq 0x19bd(%rip), %rsi      # 0x402b
leaq -0x1a(%rbp), %rdx
movq %r15, %rdi
callq 0x2060
leaq -0xf0(%rbp), %rdi
leaq -0x80(%rbp), %rsi
pushq $0x3
popq %rdx
leaq -0x19(%rbp), %rcx
callq 0x2ee4
pushq $0x40
popq %rbx
leaq (%rbx,%rbp), %rdi
addq $-0x80, %rdi
callq 0x2080
addq $-0x20, %rbx
cmpq $-0x20, %rbx
jne 0x2694
movq 0x36fe(%rip), %rax      # 0x5db0
leaq -0x80(%rbp), %rsi
movq %rax, 0x10(%rsi)
movups 0x36df(%rip), %xmm0     # 0x5da0
movaps %xmm0, (%rsi)
leaq -0xc0(%rbp), %rdi
pushq $0x3
popq %rdx
leaq -0x20(%rbp), %rcx
callq 0x2f1e
leaq -0x80(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x2f54
movq 0x38ea(%rip), %rdi      # 0x5fd8
leaq -0x80(%rbp), %rsi
callq 0x20e0
movq %rax, %rdi
callq 0x2090
leaq -0x80(%rbp), %rdi
callq 0x2080
leaq -0x80(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x3017
movq 0x38b9(%rip), %rdi      # 0x5fd8
leaq -0x80(%rbp), %rsi
callq 0x20e0
movq %rax, %rdi
callq 0x2090
leaq -0x80(%rbp), %rdi
callq 0x2080
leaq -0x80(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x234c
movq 0x3888(%rip), %rdi      # 0x5fd8
leaq -0x80(%rbp), %rsi
callq 0x20e0
movq %rax, %rdi
callq 0x2090
leaq -0x80(%rbp), %rdi
callq 0x2080
leaq 0x18c0(%rip), %rsi      # 0x4031
leaq -0xa0(%rbp), %rdi
callq 0x21e0
leaq -0x80(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x234c
movq 0x3844(%rip), %rdi      # 0x5fd8
leaq -0x80(%rbp), %rsi
callq 0x20e0
movq %rax, %rdi
callq 0x2090
leaq -0x80(%rbp), %rdi
callq 0x2080
leaq 0x1887(%rip), %rsi      # 0x403c
leaq -0xa0(%rbp), %rdi
callq 0x21e0
leaq -0x80(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x234c
movq 0x3800(%rip), %rdi      # 0x5fd8
leaq -0x80(%rbp), %rsi
callq 0x20e0
movq %rax, %rdi
callq 0x2090
leaq -0x80(%rbp), %rdi
callq 0x2080
leaq 0x1856(%rip), %rsi      # 0x404f
leaq -0x80(%rbp), %rdi
callq 0x2426
movq 0x37cf(%rip), %rdi      # 0x5fd8
leaq -0x80(%rbp), %rsi
callq 0x20e0
movq %rax, %rdi
callq 0x2090
leaq -0x80(%rbp), %rdi
callq 0x2080
leaq 0x17eb(%rip), %rsi      # 0x4015
leaq -0xa0(%rbp), %rdi
callq 0x21f0
movw $0x64, -0x1c(%rbp)
movl $0x6c726f77, -0x20(%rbp) # imm = 0x6C726F77
leaq -0x80(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x234c
movq 0x377e(%rip), %rdi      # 0x5fd8
leaq -0x80(%rbp), %rsi
callq 0x20e0
movq %rax, %rdi
callq 0x2090
leaq -0x80(%rbp), %rdi
callq 0x2080
leaq 0x17de(%rip), %rsi      # 0x4059
leaq -0x80(%rbp), %rdi
callq 0x2426
movq 0x374d(%rip), %rdi      # 0x5fd8
leaq -0x80(%rbp), %rsi
callq 0x20e0
movq %rax, %rdi
callq 0x2090
leaq -0x80(%rbp), %rdi
callq 0x2080
leaq -0x80(%rbp), %rdi
leaq -0x20(%rbp), %rsi
callq 0x23d4
movq 0x371f(%rip), %rdi      # 0x5fd8
leaq -0x80(%rbp), %rsi
callq 0x20e0
movq %rax, %rdi
callq 0x2090
leaq -0x80(%rbp), %rdi
callq 0x2080
leaq -0x80(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x2cda
movq 0x36ee(%rip), %rdi      # 0x5fd8
leaq -0x80(%rbp), %rsi
callq 0x20e0
movq %rax, %rdi
callq 0x2090
leaq -0x80(%rbp), %rdi
callq 0x2080
leaq -0xc0(%rbp), %rdi
callq 0x3572
leaq -0xf0(%rbp), %rdi
callq 0x30da
leaq -0xa0(%rbp), %rdi
callq 0x2080
leaq -0xd8(%rbp), %rdi
callq 0x3170
xorl %eax, %eax
addq $0xd8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
jmp 0x2a0b
jmp 0x2a0b
jmp 0x2a0b
jmp 0x2a0b
jmp 0x2a0b
jmp 0x2a0b
jmp 0x2a0b
jmp 0x2a0b
jmp 0x2a0b
jmp 0x2a0b
movq %rax, %rbx
jmp 0x2a1a
movq %rax, %rbx
pushq $0x40
popq %r14
leaq (%r14,%rbp), %rdi
addq $-0x80, %rdi
callq 0x2080
addq $-0x20, %r14
cmpq $-0x20, %r14
jne 0x2985
jmp 0x2a26
jmp 0x29a3
movq %rax, %rbx
addq $-0x20, %r15
movq %r15, %rdi
callq 0x2080
cmpq %r14, %r15
jne 0x29a6
jmp 0x2a26
jmp 0x29c7
jmp 0x29c7
jmp 0x29c7
jmp 0x29c7
jmp 0x29c7
jmp 0x29c7
jmp 0x29c7
movq %rax, %rbx
jmp 0x2a26
movq %rax, %rbx
jmp 0x2a32
jmp 0x29e3
jmp 0x29e3
jmp 0x29e3
jmp 0x29e3
jmp 0x29e3
jmp 0x29e3
jmp 0x29e3
jmp 0x29e3
jmp 0x29e3
movq %rax, %rbx
leaq -0x80(%rbp), %rdi
callq 0x2080
jmp 0x2a0e
jmp 0x29fd
jmp 0x29fd
jmp 0x29fd
jmp 0x29fd
jmp 0x29fd
jmp 0x29fd
movq %rax, %rbx
leaq -0x80(%rbp), %rdi
callq 0x2080
jmp 0x2a26
movq %rax, %rbx
leaq -0xc0(%rbp), %rdi
callq 0x3572
leaq -0xf0(%rbp), %rdi
callq 0x30da
leaq -0xa0(%rbp), %rdi
callq 0x2080
leaq -0xd8(%rbp), %rdi
callq 0x3170
movq %rbx, %rdi
callq 0x21d0