PR libstdc++/53978 * include/bits/alloc_traits.h (allocator_traits): Define static constants. * include/bits/ptr_traits.h (pointer_traits): Likewise. * include/ext/alloc_traits.h (__allocator_always_compares_equal): Likewise.
Tested x86_64-linux, committed to trunk.
diff --git a/libstdc++-v3/include/bits/alloc_traits.h b/libstdc++-v3/include/bits/alloc_traits.h index e1f4d41..80cc956 100644 --- a/libstdc++-v3/include/bits/alloc_traits.h +++ b/libstdc++-v3/include/bits/alloc_traits.h @@ -1,6 +1,6 @@ // Allocator traits -*- C++ -*- -// Copyright (C) 2011 Free Software Foundation, Inc. +// Copyright (C) 2011-2012 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 @@ -56,6 +56,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const bool __value = _S_chk<_Alloc, _Tp>(nullptr); }; + template<typename _Alloc, typename _Tp> + const bool __alloctr_rebind_helper<_Alloc, _Tp>::__value; + template<typename _Alloc, typename _Tp, bool = __alloctr_rebind_helper<_Alloc, _Tp>::__value> struct __alloctr_rebind; @@ -423,6 +426,27 @@ _GLIBCXX_ALLOC_TR_NESTED_TYPE(propagate_on_container_swap, }; template<typename _Alloc> + template<typename _Alloc2> + const bool allocator_traits<_Alloc>::__allocate_helper<_Alloc2>::value; + + template<typename _Alloc> + template<typename _Tp, typename... _Args> + const bool + allocator_traits<_Alloc>::__construct_helper<_Tp, _Args...>::value; + + template<typename _Alloc> + template<typename _Tp> + const bool allocator_traits<_Alloc>::__destroy_helper<_Tp>::value; + + template<typename _Alloc> + template<typename _Alloc2> + const bool allocator_traits<_Alloc>::__maxsize_helper<_Alloc2>::value; + + template<typename _Alloc> + template<typename _Alloc2> + const bool allocator_traits<_Alloc>::__select_helper<_Alloc2>::value; + + template<typename _Alloc> inline void __do_alloc_on_copy(_Alloc& __one, const _Alloc& __two, true_type) { __one = __two; } diff --git a/libstdc++-v3/include/bits/ptr_traits.h b/libstdc++-v3/include/bits/ptr_traits.h index bba9b49..552f487 100644 --- a/libstdc++-v3/include/bits/ptr_traits.h +++ b/libstdc++-v3/include/bits/ptr_traits.h @@ -1,6 +1,6 @@ // Pointer Traits -*- C++ -*- -// Copyright (C) 2011 Free Software Foundation, Inc. +// Copyright (C) 2011-2012 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 @@ -86,6 +86,9 @@ _GLIBCXX_HAS_NESTED_TYPE(difference_type) static const bool __value = _S_chk<_Ptr, _Up>(nullptr); }; + template<typename _Ptr, typename _Up> + const bool __ptrtr_rebind_helper<_Ptr, _Up>::__value; + template<typename _Tp, typename _Up, bool = __ptrtr_rebind_helper<_Tp, _Up>::__value> struct __ptrtr_rebind; diff --git a/libstdc++-v3/include/ext/alloc_traits.h b/libstdc++-v3/include/ext/alloc_traits.h index b3e3af6..b66f818 100644 --- a/libstdc++-v3/include/ext/alloc_traits.h +++ b/libstdc++-v3/include/ext/alloc_traits.h @@ -1,6 +1,6 @@ // Allocator traits -*- C++ -*- -// Copyright (C) 2011 Free Software Foundation, Inc. +// Copyright (C) 2011-2012 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 @@ -49,37 +49,56 @@ namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) _GLIBCXX_BEGIN_NAMESPACE_VERSION #ifdef __GXX_EXPERIMENTAL_CXX0X__ -template<typename _Alloc> - struct __allocator_always_compares_equal - { static const bool value = false; }; + template<typename _Alloc> + struct __allocator_always_compares_equal + { static const bool value = false; }; + + template<typename _Alloc> + const bool __allocator_always_compares_equal<_Alloc>::value; template<typename _Tp> struct __allocator_always_compares_equal<std::allocator<_Tp>> { static const bool value = true; }; + template<typename _Tp> + const bool __allocator_always_compares_equal<std::allocator<_Tp>>::value; + template<typename, typename> struct array_allocator; template<typename _Tp, typename _Array> struct __allocator_always_compares_equal<array_allocator<_Tp, _Array>> { static const bool value = true; }; + template<typename _Tp, typename _Array> + const bool + __allocator_always_compares_equal<array_allocator<_Tp, _Array>>::value; + template<typename> struct mt_allocator; template<typename _Tp> struct __allocator_always_compares_equal<mt_allocator<_Tp>> { static const bool value = true; }; + template<typename _Tp> + const bool __allocator_always_compares_equal<mt_allocator<_Tp>>::value; + template<typename> struct new_allocator; template<typename _Tp> struct __allocator_always_compares_equal<new_allocator<_Tp>> { static const bool value = true; }; + template<typename _Tp> + const bool __allocator_always_compares_equal<new_allocator<_Tp>>::value; + template<typename> struct pool_allocator; template<typename _Tp> struct __allocator_always_compares_equal<pool_allocator<_Tp>> { static const bool value = true; }; + + template<typename _Tp> + const bool __allocator_always_compares_equal<pool_allocator<_Tp>>::value; #endif /**