… | |
… | |
63 | |
63 | |
64 | // we shamelessly optimise for "simple" types. everything |
64 | // we shamelessly optimise for "simple" types. everything |
65 | // "not simple enough" will use the slow path. |
65 | // "not simple enough" will use the slow path. |
66 | static bool is_simple_enough () |
66 | static bool is_simple_enough () |
67 | { |
67 | { |
68 | return 1; // we are not there yet |
|
|
69 | #if __cplusplus >= 201103L |
68 | #if __cplusplus >= 201103L |
70 | return std::is_trivially_assignable<T, T>::value |
69 | return std::is_trivially_assignable<T, T>::value |
71 | && std::is_trivially_constructable<T>::value |
70 | && std::is_trivially_constructable<T>::value |
72 | && std::is_trivially_copyable<T>::value |
71 | && std::is_trivially_copyable<T>::value |
73 | && std::is_trivially_destructible<T>::value; |
72 | && std::is_trivially_destructible<T>::value; |