http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52591
--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-03-15 00:36:22 UTC --- (In reply to comment #1) > Jon, can you have a look? I suspect it's just matter of telling apart cases in > the move-assignment operator at compile time with templates instead of a > normal > conditional. Oh I see what you mean, the untaken branch is instantiated anyway. It's not possible to tell if the allocators are equal at compile-time and until we implement DR 2103 (I have a patch) propagate_on_container_move_assignment is false for std::allocator, so that branch will be taken in general. Anyway, I'll look into it...