------- Comment #47 from potswa at mac dot com 2009-11-03 17:21 ------- What is the function of the helper class? I suppose the user could get improved performance by specializing __is_scalar<MyClass>, but that could have unintended consequences (resulting from the class not being scalar), not to mention that the user is then modifying nonstandard internals. Furthermore, we care more about whether it's POD than scalar.
Why not adapt or add a general interface to the test used by __copy_move* in stl_algo.h? const bool __simple = (__is_pod(_ValueTypeI) && __is_pointer<_II>::__value && __is_pointer<_OI>::__value && __are_same<_ValueTypeI, _ValueTypeO>::__value); This seems to capture the requirements of memmove although using copy/move instead of swap should also be faster for large PODs in eg linked lists. Anyway, __is_pod being reasonably sufficient for compliant behavior wrt "complexity of a swap" being known, couldn't we just take patch_draft_2 and substitute in if ( __is_pod(_ValueType) && __k == 1) I favor this alternative. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41351