Exploring C++'s weird and wonderful object-initialisation rules