39 #include <type_traits>
55 static_assert(std::is_destructible<T>::value,
"T : must be destructible");
56 static_assert(std::is_copy_constructible<T>::value,
"T : must be copy constructible");
57 static_assert(std::is_move_constructible<T>::value,
"T : must be move constructible");
58 static_assert(std::is_copy_assignable<T>::value,
"T : must be copy assignable");
59 static_assert(std::is_move_assignable<T>::value,
"T : must be move assignable");
61 return std::is_destructible<T>::value &&
62 std::is_copy_constructible<T>::value &&
63 std::is_move_constructible<T>::value &&
64 std::is_copy_assignable<T>::value &&
65 std::is_move_assignable<T>::value;
71 static_assert(fulfills_rule_of_5<T>(),
"T : must fulfill rule of 5");
72 static_assert(std::is_default_constructible<T>::value,
"T : must be default constructible");
74 return fulfills_rule_of_5<T>() &&
75 std::is_default_constructible<T>::value;
81 static_assert( (std::is_trivially_copy_constructible<T>::value && std::is_trivially_destructible<T>::value) ||
82 std::is_nothrow_move_constructible<T>::value,
83 "T : doesn't fulfill fast vector (trivially copy constructible " \
84 "and trivially destructible, or nothrow move constructible)");
86 return (std::is_trivially_copy_constructible<T>::value && std::is_trivially_destructible<T>::value) ||
87 std::is_nothrow_move_constructible<T>::value;
89 #endif // check for gcc < 5.0