+ size_type max_size() {
+ return ((size_type)-1) / sizeof(value_type);
+ }
+ void construct( pointer p, const_reference val ) {
+ new ((void*)p) value_type (val);
+ }
+ // C++11
+ #if _CXX11_AVAIL
+ template<class U, class... Args>
+ void construct( U* p, Args&&... args ) {
+ ::new ((void*)p) U (::std::forward<Args>(args)...);
+ }
+ #endif
+ void destroy(pointer p) {
+ p->~value_type();
+ }
+};
+
+template <class T>
+class allocator_noconstruct:
+ public ::std::_bits::allocator_real<T>
+{
+public:
+ void construct( typename allocator_real<T>::pointer p, typename allocator_real<T>::const_reference val ) {
+ *p = val;
+ }
+ void destroy(typename allocator_real<T>::pointer p) {
+ }
+};
+
+};
+
+template <class T>
+class allocator:
+ public _bits::allocator_real<T>
+{