John L. Kulp wrote: > Shouldn't the last (optional) argument be (1) const and (2) a reference > (rather than a potentially very expensive copying call-by-value)? Among > other things, if you have a type declared with alignment attributes, it > will fail on this. I notice the MSVC implementation has (1) but not > (2). I can't see any code that would depend on the value being copied.
The standard specifies the signature. Making it const doesn't change the signature, so that's conforming, but doesn't avoid the copy. Making it a reference would be non-conforming. If copy constructions are very expensive then maybe storing the types in std::vector directly isn't a good idea. You could store them by (smart) pointer instead, or just use capacity and push_back instead of resize. Calling resize(n) could result in n copy constructions, so one more for the parameter isn't going to matter in many cases. If you remain unconvinced you might want to take the thread to [EMAIL PROTECTED] rather than this list, but I'm certain noone will change that signature while the standard says it passes by value. Jon