]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - libstdc++-v3/include/bits/stl_bvector.h
Update copyright years in libstdc++-v3/
[thirdparty/gcc.git] / libstdc++-v3 / include / bits / stl_bvector.h
index c7a4acdc084ca04703ca75967c59493519efc4a4..996eb1a8d73dd2a2d93c70cdf63ab66db37bf5b5 100644 (file)
@@ -1,7 +1,6 @@
 // vector<bool> specialization -*- C++ -*-
 
-// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
-// Free Software Foundation, Inc.
+// Copyright (C) 2001-2014 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
  * purpose.  It is provided "as is" without express or implied warranty.
  */
 
-/** @file stl_bvector.h
+/** @file bits/stl_bvector.h
  *  This is an internal header file, included by other library headers.
- *  You should not attempt to use it directly.
+ *  Do not attempt to use it directly. @headername{vector}
  */
 
 #ifndef _STL_BVECTOR_H
 #define _STL_BVECTOR_H 1
 
+#if __cplusplus >= 201103L
 #include <initializer_list>
+#endif
 
-_GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
 
   typedef unsigned long _Bit_type;
   enum { _S_word_bit = int(__CHAR_BIT__ * sizeof(_Bit_type)) };
@@ -72,13 +75,13 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
     _Bit_reference(_Bit_type * __x, _Bit_type __y)
     : _M_p(__x), _M_mask(__y) { }
 
-    _Bit_reference() : _M_p(0), _M_mask(0) { }
+    _Bit_reference() _GLIBCXX_NOEXCEPT : _M_p(0), _M_mask(0) { }
 
-    operator bool() const
+    operator bool() const _GLIBCXX_NOEXCEPT
     { return !!(*_M_p & _M_mask); }
 
     _Bit_reference&
-    operator=(bool __x)
+    operator=(bool __x) _GLIBCXX_NOEXCEPT
     {
       if (__x)
        *_M_p |= _M_mask;
@@ -88,7 +91,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
     }
 
     _Bit_reference&
-    operator=(const _Bit_reference& __x)
+    operator=(const _Bit_reference& __x) _GLIBCXX_NOEXCEPT
     { return *this = bool(__x); }
 
     bool
@@ -100,10 +103,36 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
     { return !bool(*this) && bool(__x); }
 
     void
-    flip()
+    flip() _GLIBCXX_NOEXCEPT
     { *_M_p ^= _M_mask; }
   };
 
+#if __cplusplus >= 201103L
+  inline void
+  swap(_Bit_reference __x, _Bit_reference __y) noexcept
+  {
+    bool __tmp = __x;
+    __x = __y;
+    __y = __tmp;
+  }
+
+  inline void
+  swap(_Bit_reference __x, bool& __y) noexcept
+  {
+    bool __tmp = __x;
+    __x = __y;
+    __y = __tmp;
+  }
+
+  inline void
+  swap(bool& __x, _Bit_reference __y) noexcept
+  {
+    bool __tmp = __x;
+    __x = __y;
+    __y = __tmp;
+  }
+#endif
+
   struct _Bit_iterator_base
   : public std::iterator<std::random_access_iterator_tag, bool>
   {
@@ -193,6 +222,10 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
     _Bit_iterator(_Bit_type * __x, unsigned int __y)
     : _Bit_iterator_base(__x, __y) { }
 
+    iterator
+    _M_const_cast() const
+    { return *this; }
+
     reference
     operator*() const
     { return reference(_M_p, 1UL << _M_offset); }
@@ -279,6 +312,10 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
     _Bit_const_iterator(const _Bit_iterator& __x)
     : _Bit_iterator_base(__x._M_p, __x._M_offset) { }
 
+    _Bit_iterator
+    _M_const_cast() const
+    { return _Bit_iterator(_M_p, _M_offset); }
+
     const_reference
     operator*() const
     { return _Bit_reference(_M_p, 1UL << _M_offset); }
@@ -390,21 +427,28 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
        _Bvector_impl(const _Bit_alloc_type& __a)
        : _Bit_alloc_type(__a), _M_start(), _M_finish(), _M_end_of_storage(0)
        { }
+
+#if __cplusplus >= 201103L
+       _Bvector_impl(_Bit_alloc_type&& __a)
+       : _Bit_alloc_type(std::move(__a)), _M_start(), _M_finish(),
+         _M_end_of_storage(0)
+       { }
+#endif
       };
 
     public:
       typedef _Alloc allocator_type;
 
       _Bit_alloc_type&
-      _M_get_Bit_allocator()
+      _M_get_Bit_allocator() _GLIBCXX_NOEXCEPT
       { return *static_cast<_Bit_alloc_type*>(&this->_M_impl); }
 
       const _Bit_alloc_type&
-      _M_get_Bit_allocator() const
+      _M_get_Bit_allocator() const _GLIBCXX_NOEXCEPT
       { return *static_cast<const _Bit_alloc_type*>(&this->_M_impl); }
 
       allocator_type
-      get_allocator() const
+      get_allocator() const _GLIBCXX_NOEXCEPT
       { return allocator_type(_M_get_Bit_allocator()); }
 
       _Bvector_base()
@@ -413,9 +457,9 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
       _Bvector_base(const allocator_type& __a)
       : _M_impl(__a) { }
 
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      _Bvector_base(_Bvector_base&& __x)
-      : _M_impl(__x._M_get_Bit_allocator())
+#if __cplusplus >= 201103L
+      _Bvector_base(_Bvector_base&& __x) noexcept
+      : _M_impl(std::move(__x._M_get_Bit_allocator()))
       {
        this->_M_impl._M_start = __x._M_impl._M_start;
        this->_M_impl._M_finish = __x._M_impl._M_finish;
@@ -434,8 +478,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
 
       _Bit_type*
       _M_allocate(size_t __n)
-      { return _M_impl.allocate((__n + int(_S_word_bit) - 1)
-                               / int(_S_word_bit)); }
+      { return _M_impl.allocate(_S_nword(__n)); }
 
       void
       _M_deallocate()
@@ -444,26 +487,35 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
          _M_impl.deallocate(_M_impl._M_start._M_p,
                             _M_impl._M_end_of_storage - _M_impl._M_start._M_p);
       }
+
+      static size_t
+      _S_nword(size_t __n)
+      { return (__n + int(_S_word_bit) - 1) / int(_S_word_bit); }
     };
 
-_GLIBCXX_END_NESTED_NAMESPACE
+_GLIBCXX_END_NAMESPACE_CONTAINER
+} // namespace std
 
 // Declare a partial specialization of vector<T, Alloc>.
 #include <bits/stl_vector.h>
 
-_GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_CONTAINER
 
   /**
    *  @brief  A specialization of vector for booleans which offers fixed time
    *  access to individual elements in any order.
    *
+   *  @ingroup sequences
+   *
+   *  @tparam _Alloc  Allocator type.
+   *
    *  Note that vector<bool> does not actually meet the requirements for being
    *  a container.  This is because the reference and pointer types are not
    *  really references and pointers to bool.  See DR96 for details.  @see
    *  vector for function documentation.
    *
-   *  @ingroup sequences
-   *
    *  In some terminology a %vector can be described as a dynamic
    *  C-style array, it offers fast and efficient access to individual
    *  elements in any order and saves the user from worrying about
@@ -475,8 +527,8 @@ template<typename _Alloc>
   {
     typedef _Bvector_base<_Alloc>                       _Base;
 
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-    template<typename> friend class hash;
+#if __cplusplus >= 201103L
+    template<typename> friend struct hash;
 #endif
 
   public:
@@ -499,6 +551,7 @@ template<typename _Alloc>
   protected:
     using _Base::_M_allocate;
     using _Base::_M_deallocate;
+    using _Base::_S_nword;
     using _Base::_M_get_Bit_allocator;
 
   public:
@@ -509,6 +562,21 @@ template<typename _Alloc>
     vector(const allocator_type& __a)
     : _Base(__a) { }
 
+#if __cplusplus >= 201103L
+    explicit
+    vector(size_type __n, const allocator_type& __a = allocator_type())
+    : vector(__n, false, __a)
+    { }
+
+    vector(size_type __n, const bool& __value, 
+          const allocator_type& __a = allocator_type())
+    : _Base(__a)
+    {
+      _M_initialize(__n);
+      std::fill(this->_M_impl._M_start._M_p, this->_M_impl._M_end_of_storage, 
+               __value ? ~0 : 0);
+    }
+#else
     explicit
     vector(size_type __n, const bool& __value = bool(), 
           const allocator_type& __a = allocator_type())
@@ -518,6 +586,7 @@ template<typename _Alloc>
       std::fill(this->_M_impl._M_start._M_p, this->_M_impl._M_end_of_storage, 
                __value ? ~0 : 0);
     }
+#endif
 
     vector(const vector& __x)
     : _Base(__x._M_get_Bit_allocator())
@@ -526,9 +595,9 @@ template<typename _Alloc>
       _M_copy_aligned(__x.begin(), __x.end(), this->_M_impl._M_start);
     }
 
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-    vector(vector&& __x)
-    : _Base(std::forward<_Base>(__x)) { }
+#if __cplusplus >= 201103L
+    vector(vector&& __x) noexcept
+    : _Base(std::move(__x)) { }
 
     vector(initializer_list<bool> __l,
           const allocator_type& __a = allocator_type())
@@ -539,6 +608,14 @@ template<typename _Alloc>
     }
 #endif
 
+#if __cplusplus >= 201103L
+    template<typename _InputIterator,
+            typename = std::_RequireInputIter<_InputIterator>>
+      vector(_InputIterator __first, _InputIterator __last,
+            const allocator_type& __a = allocator_type())
+      : _Base(__a)
+      { _M_initialize_dispatch(__first, __last, __false_type()); }
+#else
     template<typename _InputIterator>
       vector(_InputIterator __first, _InputIterator __last,
             const allocator_type& __a = allocator_type())
@@ -547,8 +624,9 @@ template<typename _Alloc>
        typedef typename std::__is_integer<_InputIterator>::__type _Integral;
        _M_initialize_dispatch(__first, __last, _Integral());
       }
+#endif
 
-    ~vector() { }
+    ~vector() _GLIBCXX_NOEXCEPT { }
 
     vector&
     operator=(const vector& __x)
@@ -565,7 +643,7 @@ template<typename _Alloc>
       return *this;
     }
 
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
+#if __cplusplus >= 201103L
     vector&
     operator=(vector&& __x)
     {
@@ -592,6 +670,13 @@ template<typename _Alloc>
     assign(size_type __n, const bool& __x)
     { _M_fill_assign(__n, __x); }
 
+#if __cplusplus >= 201103L
+    template<typename _InputIterator,
+            typename = std::_RequireInputIter<_InputIterator>>
+      void
+      assign(_InputIterator __first, _InputIterator __last)
+      { _M_assign_dispatch(__first, __last, __false_type()); }
+#else
     template<typename _InputIterator>
       void
       assign(_InputIterator __first, _InputIterator __last)
@@ -599,69 +684,70 @@ template<typename _Alloc>
        typedef typename std::__is_integer<_InputIterator>::__type _Integral;
        _M_assign_dispatch(__first, __last, _Integral());
       }
+#endif
 
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
+#if __cplusplus >= 201103L
     void
     assign(initializer_list<bool> __l)
     { this->assign(__l.begin(), __l.end()); }
 #endif
 
     iterator
-    begin()
+    begin() _GLIBCXX_NOEXCEPT
     { return this->_M_impl._M_start; }
 
     const_iterator
-    begin() const
+    begin() const _GLIBCXX_NOEXCEPT
     { return this->_M_impl._M_start; }
 
     iterator
-    end()
+    end() _GLIBCXX_NOEXCEPT
     { return this->_M_impl._M_finish; }
 
     const_iterator
-    end() const
+    end() const _GLIBCXX_NOEXCEPT
     { return this->_M_impl._M_finish; }
 
     reverse_iterator
-    rbegin()
+    rbegin() _GLIBCXX_NOEXCEPT
     { return reverse_iterator(end()); }
 
     const_reverse_iterator
-    rbegin() const
+    rbegin() const _GLIBCXX_NOEXCEPT
     { return const_reverse_iterator(end()); }
 
     reverse_iterator
-    rend()
+    rend() _GLIBCXX_NOEXCEPT
     { return reverse_iterator(begin()); }
 
     const_reverse_iterator
-    rend() const
+    rend() const _GLIBCXX_NOEXCEPT
     { return const_reverse_iterator(begin()); }
 
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
+#if __cplusplus >= 201103L
     const_iterator
-    cbegin() const
+    cbegin() const noexcept
     { return this->_M_impl._M_start; }
 
     const_iterator
-    cend() const
+    cend() const noexcept
     { return this->_M_impl._M_finish; }
 
     const_reverse_iterator
-    crbegin() const
+    crbegin() const noexcept
     { return const_reverse_iterator(end()); }
 
     const_reverse_iterator
-    crend() const
+    crend() const noexcept
     { return const_reverse_iterator(begin()); }
 #endif
 
     size_type
-    size() const
+    size() const _GLIBCXX_NOEXCEPT
     { return size_type(end() - begin()); }
 
     size_type
-    max_size() const
+    max_size() const _GLIBCXX_NOEXCEPT
     {
       const size_type __isize =
        __gnu_cxx::__numeric_traits<difference_type>::__max
@@ -672,12 +758,12 @@ template<typename _Alloc>
     }
 
     size_type
-    capacity() const
+    capacity() const _GLIBCXX_NOEXCEPT
     { return size_type(const_iterator(this->_M_impl._M_end_of_storage, 0)
                       - begin()); }
 
     bool
-    empty() const
+    empty() const _GLIBCXX_NOEXCEPT
     { return begin() == end(); }
 
     reference
@@ -699,7 +785,10 @@ template<typename _Alloc>
     _M_range_check(size_type __n) const
     {
       if (__n >= this->size())
-        __throw_out_of_range(__N("vector<bool>::_M_range_check"));
+       __throw_out_of_range_fmt(__N("vector<bool>::_M_range_check: __n "
+                                    "(which is %zu) >= this->size() "
+                                    "(which is %zu)"),
+                                __n, this->size());
     }
 
   public:
@@ -712,7 +801,13 @@ template<typename _Alloc>
     { _M_range_check(__n); return (*this)[__n]; }
 
     void
-    reserve(size_type __n);
+    reserve(size_type __n)
+    {
+      if (__n > max_size())
+       __throw_length_error(__N("vector::reserve"));
+      if (capacity() < __n)
+       _M_reallocate(__n);
+    }
 
     reference
     front()
@@ -736,7 +831,7 @@ template<typename _Alloc>
     // here due to the way we are implementing DR 464 in the debug-mode
     // vector class.
     void
-    data() { }
+    data() _GLIBCXX_NOEXCEPT { }
 
     void
     push_back(bool __x)
@@ -763,7 +858,7 @@ template<typename _Alloc>
 
     // [23.2.5]/1, third-to-last entry in synopsis listing
     static void
-    swap(reference __x, reference __y)
+    swap(reference __x, reference __y) _GLIBCXX_NOEXCEPT
     {
       bool __tmp = __x;
       __x = __y;
@@ -771,17 +866,34 @@ template<typename _Alloc>
     }
 
     iterator
+#if __cplusplus >= 201103L
+    insert(const_iterator __position, const bool& __x = bool())
+#else
     insert(iterator __position, const bool& __x = bool())
+#endif
     {
       const difference_type __n = __position - begin();
       if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_of_storage
          && __position == end())
         *this->_M_impl._M_finish++ = __x;
       else
-        _M_insert_aux(__position, __x);
+        _M_insert_aux(__position._M_const_cast(), __x);
       return begin() + __n;
     }
 
+#if __cplusplus >= 201103L
+    template<typename _InputIterator,
+            typename = std::_RequireInputIter<_InputIterator>>
+      iterator
+      insert(const_iterator __position,
+            _InputIterator __first, _InputIterator __last)
+      {
+       difference_type __offset = __position - cbegin();
+       _M_insert_dispatch(__position._M_const_cast(),
+                          __first, __last, __false_type());
+       return begin() + __offset;
+      }
+#else
     template<typename _InputIterator>
       void
       insert(iterator __position,
@@ -790,14 +902,26 @@ template<typename _Alloc>
        typedef typename std::__is_integer<_InputIterator>::__type _Integral;
        _M_insert_dispatch(__position, __first, __last, _Integral());
       }
+#endif
 
+#if __cplusplus >= 201103L
+    iterator
+    insert(const_iterator __position, size_type __n, const bool& __x)
+    {
+      difference_type __offset = __position - cbegin();
+      _M_fill_insert(__position._M_const_cast(), __n, __x);
+      return begin() + __offset;
+    }
+#else
     void
     insert(iterator __position, size_type __n, const bool& __x)
     { _M_fill_insert(__position, __n, __x); }
+#endif
 
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-    void insert(iterator __p, initializer_list<bool> __l)
-    { this->insert(__p, __l.begin(), __l.end()); }
+#if __cplusplus >= 201103L
+    iterator
+    insert(const_iterator __p, initializer_list<bool> __l)
+    { return this->insert(__p, __l.begin(), __l.end()); }
 #endif
 
     void
@@ -805,20 +929,20 @@ template<typename _Alloc>
     { --this->_M_impl._M_finish; }
 
     iterator
+#if __cplusplus >= 201103L
+    erase(const_iterator __position)
+#else
     erase(iterator __position)
-    {
-      if (__position + 1 != end())
-        std::copy(__position + 1, end(), __position);
-      --this->_M_impl._M_finish;
-      return __position;
-    }
+#endif
+    { return _M_erase(__position._M_const_cast()); }
 
     iterator
+#if __cplusplus >= 201103L
+    erase(const_iterator __first, const_iterator __last)
+#else
     erase(iterator __first, iterator __last)
-    {
-      _M_erase_at_end(std::copy(__last, end(), __first));
-      return __first;
-    }
+#endif
+    { return _M_erase(__first._M_const_cast(), __last._M_const_cast()); }
 
     void
     resize(size_type __new_size, bool __x = bool())
@@ -829,14 +953,14 @@ template<typename _Alloc>
         insert(end(), __new_size - size(), __x);
     }
 
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
+#if __cplusplus >= 201103L
     void
     shrink_to_fit()
-    { std::__shrink_to_fit<vector>::_S_do_it(*this); }
+    { _M_shrink_to_fit(); }
 #endif
 
     void
-    flip()
+    flip() _GLIBCXX_NOEXCEPT
     {
       for (_Bit_type * __p = this->_M_impl._M_start._M_p;
           __p != this->_M_impl._M_end_of_storage; ++__p)
@@ -844,10 +968,21 @@ template<typename _Alloc>
     }
 
     void
-    clear()
+    clear() _GLIBCXX_NOEXCEPT
     { _M_erase_at_end(begin()); }
 
-   
+#if __cplusplus >= 201103L
+    template<typename... _Args>
+      void
+      emplace_back(_Args&&... __args)
+      { push_back(bool(__args...)); }
+
+    template<typename... _Args>
+      iterator
+      emplace(const_iterator __pos, _Args&&... __args)
+      { return insert(__pos, bool(__args...)); }
+#endif
+
   protected:
     // Precondition: __first._M_offset == 0 && __result._M_offset == 0.
     iterator
@@ -863,13 +998,19 @@ template<typename _Alloc>
     _M_initialize(size_type __n)
     {
       _Bit_type* __q = this->_M_allocate(__n);
-      this->_M_impl._M_end_of_storage = (__q
-                                        + ((__n + int(_S_word_bit) - 1)
-                                           / int(_S_word_bit)));
+      this->_M_impl._M_end_of_storage = __q + _S_nword(__n);
       this->_M_impl._M_start = iterator(__q, 0);
       this->_M_impl._M_finish = this->_M_impl._M_start + difference_type(__n);
     }
 
+    void
+    _M_reallocate(size_type __n);
+
+#if __cplusplus >= 201103L
+    bool
+    _M_shrink_to_fit();
+#endif
+
     // Check whether it's an integral type.  If so, it's not an iterator.
 
     // _GLIBCXX_RESOLVE_LIB_DEFECTS
@@ -1024,64 +1165,38 @@ template<typename _Alloc>
     void
     _M_erase_at_end(iterator __pos)
     { this->_M_impl._M_finish = __pos; }
+
+    iterator
+    _M_erase(iterator __pos);
+
+    iterator
+    _M_erase(iterator __first, iterator __last);
   };
 
-_GLIBCXX_END_NESTED_NAMESPACE
+_GLIBCXX_END_NAMESPACE_CONTAINER
+} // namespace std
 
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
+#if __cplusplus >= 201103L
 
 #include <bits/functional_hash.h>
 
-_GLIBCXX_BEGIN_NAMESPACE(std)
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   // DR 1182.
   /// std::hash specialization for vector<bool>.
   template<typename _Alloc>
-    struct hash<_GLIBCXX_STD_D::vector<bool, _Alloc>>
-    : public std::unary_function<_GLIBCXX_STD_D::vector<bool, _Alloc>, size_t>
+    struct hash<_GLIBCXX_STD_C::vector<bool, _Alloc>>
+    : public __hash_base<size_t, _GLIBCXX_STD_C::vector<bool, _Alloc>>
     {
       size_t
-      operator()(const _GLIBCXX_STD_D::vector<bool, _Alloc>& __b) const;
+      operator()(const _GLIBCXX_STD_C::vector<bool, _Alloc>&) const noexcept;
     };
 
-  template<typename _Alloc>
-    size_t
-    hash<_GLIBCXX_STD_D::vector<bool, _Alloc>>::
-    operator()(const _GLIBCXX_STD_D::vector<bool, _Alloc>& __b) const
-    {
-      size_t __hash = 0;
-      using _GLIBCXX_STD_D::_S_word_bit;
-      using _GLIBCXX_STD_D::_Bit_type;
-
-      const size_t __words = __b.size() / _S_word_bit;
-      if (__words)
-       {
-         const char* __data
-           = reinterpret_cast<const char*>(__b._M_impl._M_start._M_p);
-         const size_t __size = __words * sizeof(_Bit_type);
-         __hash = std::_Fnv_hash::hash(__data, __size);
-       }
-
-      const size_t __extrabits = __b.size() % _S_word_bit;
-      if (__extrabits)
-       {
-         _Bit_type __hiword = *__b._M_impl._M_finish._M_p;
-         __hiword &= ~((~static_cast<_Bit_type>(0)) << __extrabits);
-
-         const char* __data = reinterpret_cast<const char*>(&__hiword);
-         const size_t __size
-           = (__extrabits + __CHAR_BIT__ - 1) / __CHAR_BIT__;
-         if (__words)
-           __hash = std::_Fnv_hash::hash(__data, __size, __hash);
-         else
-           __hash = std::_Fnv_hash::hash(__data, __size);
-       }
-
-      return __hash;
-    }
-
-_GLIBCXX_END_NAMESPACE
+_GLIBCXX_END_NAMESPACE_VERSION
+}// namespace std
 
-#endif // __GXX_EXPERIMENTAL_CXX0X__
+#endif // C++11
 
 #endif