I think it is a function call rather than a constructor since map is a red-black tree and likely wraps 'first' and 'second' with pointers to left and right. Several stl types (such as list) contain internal allocators that allocate these internal nodes that keep the lists, trees, etc, coherent. So how does map zero out the members of a complex type if there is no explicit function for this within the type?