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