template <class T> struct has_trivial_move_assign : public
If a type has a trivial move assignment-operator then the operator has the
same effect as copying the bits of one object to the other: calls to the
operator can be safely replaced with a call to
Compiler Compatibility: If the compiler does not support partial-specialization of class templates, then this template can not be used with function types.
Without some (as yet unspecified) help from the compiler, has_trivial_move_assign
will never report that a user-defined class or struct has a trivial constructor;
this is always safe, if possibly sub-optimal. Currently (February 2013) compilers
have no necessary intrinsics
to ensure that this trait "just works". You may also test to see
if the necessary intrinsics
are available by checking to see if the macro
has_trivial_move_assign<char*>::typeis the type
has_trivial_move_assign<int (*)(long)>::valueis an integral constant expression that evaluates to true.
has_trivial_move_assign<MyClass>::valueis an integral constant expression that evaluates to false.
has_trivial_move_assign<T>::value_typeis the type