// File: iZhangHui[P]CppPrimer/CH12_DynamicMemory/examples/useBlob.cc
// Function: main
int main()
{
	StrBlob b1;
	{
		// StrBlob(initializer_list<string> il)
		StrBlob b2 = { "a", "an", "the" };
		b1 = b2; // assign
		b2.push_back("about");
		cout << b2.size() << endl;
	}
	cout << b1.size() << endl;

	// auto == StrBlobPtr
	for (auto it = b1.begin(); neq(it, b1.end()); it.incr())
		cout << it.deref() << endl;

	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1c0, %rsp            # imm = 0x1C0
movl $0x0, -0x4(%rbp)
leaq -0x18(%rbp), %rdi
callq 0x2880
movb $0x1, -0xb7(%rbp)
leaq -0x98(%rbp), %rax
movq %rax, -0x120(%rbp)
movq %rax, -0xa0(%rbp)
leaq -0xa1(%rbp), %rdi
movq %rdi, -0x118(%rbp)
callq 0x21e0
movq -0x120(%rbp), %rdi
movq -0x118(%rbp), %rdx
leaq 0x3c75(%rip), %rsi      # 0x6004
callq 0x2160
jmp 0x2396
leaq -0x78(%rbp), %rax
movq %rax, -0x130(%rbp)
movq %rax, -0xa0(%rbp)
leaq -0xb5(%rbp), %rdi
movq %rdi, -0x128(%rbp)
callq 0x21e0
movq -0x130(%rbp), %rdi
movq -0x128(%rbp), %rdx
leaq 0x3c36(%rip), %rsi      # 0x6006
callq 0x2160
jmp 0x23d7
leaq -0x58(%rbp), %rax
movq %rax, -0x140(%rbp)
movq %rax, -0xa0(%rbp)
leaq -0xb6(%rbp), %rdi
movq %rdi, -0x138(%rbp)
callq 0x21e0
movq -0x140(%rbp), %rdi
movq -0x138(%rbp), %rdx
leaq 0x3bf8(%rip), %rsi      # 0x6009
callq 0x2160
jmp 0x2418
movb $0x0, -0xb7(%rbp)
leaq -0x98(%rbp), %rax
movq %rax, -0x38(%rbp)
movq $0x3, -0x30(%rbp)
movq -0x38(%rbp), %rsi
movq -0x30(%rbp), %rdx
leaq -0x28(%rbp), %rdi
callq 0x28a0
jmp 0x2445
leaq -0x98(%rbp), %rax
movq %rax, -0x150(%rbp)
addq $0x60, %rax
movq %rax, -0x148(%rbp)
movq -0x148(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x158(%rbp)
callq 0x20d0
movq -0x150(%rbp), %rcx
movq -0x158(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x148(%rbp)
jne 0x245e
leaq -0xb6(%rbp), %rdi
callq 0x2150
leaq -0xb5(%rbp), %rdi
callq 0x2150
leaq -0xa1(%rbp), %rdi
callq 0x2150
leaq -0x18(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x28d0
leaq -0xd9(%rbp), %rdi
movq %rdi, -0x160(%rbp)
callq 0x21e0
movq -0x160(%rbp), %rdx
leaq 0x3b2c(%rip), %rsi      # 0x600d
leaq -0xd8(%rbp), %rdi
callq 0x2160
jmp 0x24ef
leaq -0x28(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0x2900
jmp 0x2501
leaq -0xd8(%rbp), %rdi
callq 0x20d0
leaq -0xd9(%rbp), %rdi
callq 0x2150
leaq -0x28(%rbp), %rdi
callq 0x2930
movq %rax, -0x168(%rbp)
jmp 0x252b
movq -0x168(%rbp), %rsi
movq 0x7a87(%rip), %rdi      # 0x9fc0
callq 0x2030
movq %rax, -0x170(%rbp)
jmp 0x2547
movq -0x170(%rbp), %rdi
movq 0x7a4b(%rip), %rsi      # 0x9fa0
callq 0x2140
jmp 0x255c
leaq -0x28(%rbp), %rdi
callq 0x2960
leaq -0x18(%rbp), %rdi
callq 0x2930
movq %rax, -0x178(%rbp)
jmp 0x2577
movq -0x178(%rbp), %rsi
movq 0x7a3b(%rip), %rdi      # 0x9fc0
callq 0x2030
movq %rax, -0x180(%rbp)
jmp 0x2593
movq -0x180(%rbp), %rdi
movq 0x79ff(%rip), %rsi      # 0x9fa0
callq 0x2140
jmp 0x25a8
leaq -0xf8(%rbp), %rdi
leaq -0x18(%rbp), %rsi
callq 0x2980
jmp 0x25ba
jmp 0x25bc
leaq -0x110(%rbp), %rdi
leaq -0x18(%rbp), %rsi
callq 0x29e0
jmp 0x25ce
leaq -0xf8(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x29b0
movb %al, -0x181(%rbp)
jmp 0x25e9
leaq -0x110(%rbp), %rdi
callq 0x2a50
movb -0x181(%rbp), %al
testb $0x1, %al
jne 0x27dd
leaq -0xf8(%rbp), %rdi
callq 0x2a50
jmp 0x2846
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x26c9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x26bd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x26b1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x98(%rbp), %rax
movq %rax, -0x198(%rbp)
addq $0x60, %rax
movq %rax, -0x190(%rbp)
movq -0x190(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x1a0(%rbp)
callq 0x20d0
movq -0x198(%rbp), %rcx
movq -0x1a0(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x190(%rbp)
jne 0x267e
jmp 0x26b1
leaq -0xb6(%rbp), %rdi
callq 0x2150
leaq -0xb5(%rbp), %rdi
callq 0x2150
leaq -0xa1(%rbp), %rdi
callq 0x2150
testb $0x1, -0xb7(%rbp)
jne 0x26e0
jmp 0x272d
movq -0xa0(%rbp), %rax
leaq -0x98(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0x1a8(%rbp)
je 0x272b
movq -0x1a8(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x1b0(%rbp)
callq 0x20d0
movq -0x1b0(%rbp), %rax
leaq -0x98(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0x1a8(%rbp)
jne 0x26fa
jmp 0x272d
jmp 0x2862
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x2764
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x20d0
leaq -0xd9(%rbp), %rdi
callq 0x2150
jmp 0x2784
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x2960
jmp 0x2862
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x2862
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x2838
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x110(%rbp), %rdi
callq 0x2a50
jmp 0x2838
leaq -0xf8(%rbp), %rdi
callq 0x2a70
movq %rax, -0x1b8(%rbp)
jmp 0x27f2
movq -0x1b8(%rbp), %rsi
movq 0x77c0(%rip), %rdi      # 0x9fc0
callq 0x2110
movq %rax, -0x1c0(%rbp)
jmp 0x280e
movq -0x1c0(%rbp), %rdi
movq 0x7784(%rip), %rsi      # 0x9fa0
callq 0x2140
jmp 0x2823
jmp 0x2825
leaq -0xf8(%rbp), %rdi
callq 0x2b40
jmp 0x2833
jmp 0x25bc
leaq -0xf8(%rbp), %rdi
callq 0x2a50
jmp 0x2862
movl $0x0, -0x4(%rbp)
leaq -0x18(%rbp), %rdi
callq 0x2960
movl -0x4(%rbp), %eax
addq $0x1c0, %rsp            # imm = 0x1C0
popq %rbp
retq
leaq -0x18(%rbp), %rdi
callq 0x2960
movq -0xb0(%rbp), %rdi
callq 0x21d0
nopw (%rax,%rax)