diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 63349ec95870..c3c526d0dc5c 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,41 @@ +2005-01-31 Paolo Carlini + Gabriel Dos Reis + + * include/bits/cpp_type_traits.h: Add types to the structs thus + making type_traits.h redundant; exploit new __truth_type and + __traitor helpers. + * include/bits/type_traits.h: Remove. + * include/Makefile.am: Update. + * include/Makefile.in: Regenerate. + * include/backward/tempbuf.h: Include cpp_type_traits.h instead. + * include/bits/basic_string.h (replace(iterator, iterator, + _InputIterator, _InputIterator), _S_construct(_InIterator, + _InIterator, const _Alloc&)): Use __is_integer instead. + * include/bits/stl_bvector.h (vector(_InputIterator, + _InputIterator, const allocator_type&), assign(_InputIterator, + _InputIterator), insert(iterator, _InputIterator, _InputIterator)): + Likewise. + * include/bits/stl_construct.h (_Destroy(_ForwardIterator, + _ForwardIterator)): Use __is_scalar. + * include/bits/stl_deque.h (deque(_InputIterator, _InputIterator, + const allocator_type&), assign(_InputIterator, _InputIterator), + insert(iterator, _InputIterator, _InputIterator)): Use __is_integer. + * include/bits/stl_list.h (assign(_InputIterator, _InputIterator), + insert(iterator, _InputIterator, _InputIterator)): Likewise. + * include/bits/stl_tempbuf.h (_Temporary_buffer(_ForwardIterator, + _ForwardIterator)): Use __is_scalar. + * include/bits/stl_uninitialized.h (uninitialized_copy(_InputIterator, + _InputIterator, _ForwardIterator), uninitialized_fill(_ForwardIterator, + _ForwardIterator, const _Tp&), uninitialized_fill_n(_ForwardIterator, + _Size, const _Tp&)): Likewise. + * include/bits/stl_vector.h (vector(_InputIterator, _InputIterator, + const allocator_type&), assign(_InputIterator, _InputIterator), + insert(iterator, _InputIterator, _InputIterator)): Use __is_integer. + * include/debug/debug.h (__valid_range(const _InputIterator&, + const _InputIterator&)): Use __is_integer. + * include/ext/slist (assign(_InputIterator, _InputIterator)): Likewise. + * include/std/std_string.h: Include cpp_type_traits.h instead. + 2005-01-30 Paolo Carlini PR libstdc++/19642 diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am index be8320a99908..3fa1dd65e77c 100644 --- a/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am @@ -1,6 +1,6 @@ ## Makefile for the include subdirectory of the GNU C++ Standard library. ## -## Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +## Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. ## ## This file is part of the libstdc++ version 3 distribution. ## Process this file with automake to produce Makefile.in. @@ -150,7 +150,6 @@ bits_headers = \ ${bits_srcdir}/stl_vector.h \ ${bits_srcdir}/streambuf.tcc \ ${bits_srcdir}/stringfwd.h \ - ${bits_srcdir}/type_traits.h \ ${bits_srcdir}/valarray_array.h \ ${bits_srcdir}/valarray_array.tcc \ ${bits_srcdir}/valarray_before.h \ diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in index 8a67dcb3104b..d56d35aab7f1 100644 --- a/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.9.4 from Makefile.am. +# Makefile.in generated by automake 1.9.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, @@ -366,7 +366,6 @@ bits_headers = \ ${bits_srcdir}/stl_vector.h \ ${bits_srcdir}/streambuf.tcc \ ${bits_srcdir}/stringfwd.h \ - ${bits_srcdir}/type_traits.h \ ${bits_srcdir}/valarray_array.h \ ${bits_srcdir}/valarray_array.tcc \ ${bits_srcdir}/valarray_before.h \ diff --git a/libstdc++-v3/include/backward/tempbuf.h b/libstdc++-v3/include/backward/tempbuf.h index 06de2bd39d47..151c4c1fb30d 100644 --- a/libstdc++-v3/include/backward/tempbuf.h +++ b/libstdc++-v3/include/backward/tempbuf.h @@ -1,6 +1,6 @@ // Backward-compat support -*- C++ -*- -// Copyright (C) 2001 Free Software Foundation, Inc. +// Copyright (C) 2001, 2005 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 @@ -62,7 +62,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h index f0949b4e5fcb..2b26fc54d510 100644 --- a/libstdc++-v3/include/bits/basic_string.h +++ b/libstdc++-v3/include/bits/basic_string.h @@ -1,6 +1,6 @@ // Components for manipulating sequences of characters -*- C++ -*- -// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -1361,7 +1361,7 @@ namespace std _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2 && __i2 <= _M_iend()); __glibcxx_requires_valid_range(__k1, __k2); - typedef typename _Is_integer<_InputIterator>::_Integral _Integral; + typedef typename std::__is_integer<_InputIterator>::__type _Integral; return _M_replace_dispatch(__i1, __i2, __k1, __k2, _Integral()); } @@ -1451,7 +1451,7 @@ namespace std static _CharT* _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a) { - typedef typename _Is_integer<_InIterator>::_Integral _Integral; + typedef typename std::__is_integer<_InIterator>::__type _Integral; return _S_construct_aux(__beg, __end, __a, _Integral()); } diff --git a/libstdc++-v3/include/bits/cpp_type_traits.h b/libstdc++-v3/include/bits/cpp_type_traits.h index 81a1dce7b5be..547ce08d9a6c 100644 --- a/libstdc++-v3/include/bits/cpp_type_traits.h +++ b/libstdc++-v3/include/bits/cpp_type_traits.h @@ -1,6 +1,7 @@ // The -*- C++ -*- type traits classes for internal use in libstdc++ -// Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 +// 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 @@ -39,6 +40,8 @@ #pragma GCC system_header +#include + // // This file provides some compile-time information about various types. // These representations were designed, on purpose, to be constant-expressions @@ -63,6 +66,9 @@ // // -- Gaby (dosreis@cmla.ens-cachan.fr) 2000-03-06. // +// Update 2005: types are also provided and has been +// removed. +// // NB: g++ can not compile these if declared within the class // __is_pod itself. @@ -84,8 +90,26 @@ namespace __gnu_cxx class __normal_iterator; } // namespace __gnu_cxx +struct __true_type { }; +struct __false_type { }; + namespace std { + template + struct __truth_type + { typedef __false_type __type; }; + + template<> + struct __truth_type + { typedef __true_type __type; }; + + template + struct __traitor + { + enum { _M_type = _Sp::_M_type || _Tp::_M_type }; + typedef typename __truth_type<_M_type>::__type __type; + }; + // Compare for equality of types. template struct __are_same @@ -108,7 +132,7 @@ namespace std // Define a nested type if some predicate holds. template struct __enable_if - { + { }; template @@ -121,19 +145,15 @@ namespace std template struct __is_void { - enum - { - _M_type = 0 - }; + enum { _M_type = 0 }; + typedef __false_type __type; }; template<> struct __is_void { - enum - { - _M_type = 1 - }; + enum { _M_type = 1 }; + typedef __true_type __type; }; // @@ -142,10 +162,8 @@ namespace std template struct __is_integer { - enum - { - _M_type = 0 - }; + enum { _M_type = 0 }; + typedef __false_type __type; }; // Thirteen specializations (yes there are eleven standard integer @@ -154,120 +172,94 @@ namespace std template<> struct __is_integer { - enum - { - _M_type = 1 - }; + enum { _M_type = 1 }; + typedef __true_type __type; }; template<> struct __is_integer { - enum - { - _M_type = 1 - }; + enum { _M_type = 1 }; + typedef __true_type __type; }; template<> struct __is_integer { - enum - { - _M_type = 1 - }; + enum { _M_type = 1 }; + typedef __true_type __type; }; template<> struct __is_integer { - enum - { - _M_type = 1 - }; + enum { _M_type = 1 }; + typedef __true_type __type; }; # ifdef _GLIBCXX_USE_WCHAR_T template<> struct __is_integer { - enum - { - _M_type = 1 - }; + enum { _M_type = 1 }; + typedef __true_type __type; }; # endif template<> struct __is_integer { - enum - { - _M_type = 1 - }; + enum { _M_type = 1 }; + typedef __true_type __type; }; template<> struct __is_integer { - enum - { - _M_type = 1 - }; + enum { _M_type = 1 }; + typedef __true_type __type; }; template<> struct __is_integer { - enum - { - _M_type = 1 - }; + enum { _M_type = 1 }; + typedef __true_type __type; }; template<> struct __is_integer { - enum - { - _M_type = 1 - }; + enum { _M_type = 1 }; + typedef __true_type __type; }; template<> struct __is_integer { - enum - { - _M_type = 1 - }; + enum { _M_type = 1 }; + typedef __true_type __type; }; template<> struct __is_integer { - enum - { - _M_type = 1 - }; + enum { _M_type = 1 }; + typedef __true_type __type; }; template<> struct __is_integer { - enum - { - _M_type = 1 - }; + enum { _M_type = 1 }; + typedef __true_type __type; }; template<> struct __is_integer { - enum - { - _M_type = 1 - }; + enum { _M_type = 1 }; + typedef __true_type __type; }; // @@ -276,38 +268,30 @@ namespace std template struct __is_floating { - enum - { - _M_type = 0 - }; + enum { _M_type = 0 }; + typedef __false_type __type; }; // three specializations (float, double and 'long double') template<> struct __is_floating { - enum - { - _M_type = 1 - }; + enum { _M_type = 1 }; + typedef __true_type __type; }; template<> struct __is_floating { - enum - { - _M_type = 1 - }; + enum { _M_type = 1 }; + typedef __true_type __type; }; template<> struct __is_floating { - enum - { - _M_type = 1 - }; + enum { _M_type = 1 }; + typedef __true_type __type; }; // @@ -316,19 +300,15 @@ namespace std template struct __is_pointer { - enum - { - _M_type = 0 - }; + enum { _M_type = 0 }; + typedef __false_type __type; }; template struct __is_pointer<_Tp*> { - enum - { - _M_type = 1 - }; + enum { _M_type = 1 }; + typedef __true_type __type; }; // @@ -337,20 +317,16 @@ namespace std template struct __is_normal_iterator { - enum - { - _M_type = 0 - }; + enum { _M_type = 0 }; + typedef __false_type __type; }; template struct __is_normal_iterator< __gnu_cxx::__normal_iterator<_Iterator, _Container> > { - enum - { - _M_type = 1 - }; + enum { _M_type = 1 }; + typedef __true_type __type; }; // @@ -358,36 +334,24 @@ namespace std // template struct __is_arithmetic - { - enum - { - _M_type = __is_integer<_Tp>::_M_type || __is_floating<_Tp>::_M_type - }; - }; - + : public __traitor<__is_integer<_Tp>, __is_floating<_Tp> > + { }; + // // A fundamental type is `void' or and arithmetic type // template struct __is_fundamental - { - enum - { - _M_type = __is_void<_Tp>::_M_type || __is_arithmetic<_Tp>::_M_type - }; - }; + : public __traitor<__is_void<_Tp>, __is_arithmetic<_Tp> > + { }; // // A scalar type is an arithmetic type or a pointer type // template struct __is_scalar - { - enum - { - _M_type = __is_arithmetic<_Tp>::_M_type || __is_pointer<_Tp>::_M_type - }; - }; + : public __traitor<__is_arithmetic<_Tp>, __is_pointer<_Tp> > + { }; // // For the immediate use, the following is a good approximation diff --git a/libstdc++-v3/include/bits/stl_bvector.h b/libstdc++-v3/include/bits/stl_bvector.h index a8f1b696a55e..74985071baa9 100644 --- a/libstdc++-v3/include/bits/stl_bvector.h +++ b/libstdc++-v3/include/bits/stl_bvector.h @@ -1,6 +1,6 @@ // vector specialization -*- C++ -*- -// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +// Copyright (C) 2001, 2002, 2003, 2004, 2005 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 @@ -673,7 +673,7 @@ template const allocator_type& __a = allocator_type()) : _Bvector_base<_Alloc>(__a) { - typedef typename _Is_integer<_InputIterator>::_Integral _Integral; + typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_initialize_dispatch(__first, __last, _Integral()); } @@ -724,7 +724,7 @@ template void assign(_InputIterator __first, _InputIterator __last) { - typedef typename _Is_integer<_InputIterator>::_Integral _Integral; + typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_assign_dispatch(__first, __last, _Integral()); } @@ -863,7 +863,7 @@ template insert(iterator __position, _InputIterator __first, _InputIterator __last) { - typedef typename _Is_integer<_InputIterator>::_Integral _Integral; + typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_insert_dispatch(__position, __first, __last, _Integral()); } diff --git a/libstdc++-v3/include/bits/stl_construct.h b/libstdc++-v3/include/bits/stl_construct.h index 112276e27384..71acb253a8a5 100644 --- a/libstdc++-v3/include/bits/stl_construct.h +++ b/libstdc++-v3/include/bits/stl_construct.h @@ -1,6 +1,6 @@ // nonstandard construct and destroy functions -*- C++ -*- -// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +// Copyright (C) 2001, 2002, 2003, 2004, 2005 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 @@ -61,7 +61,7 @@ #ifndef _STL_CONSTRUCT_H #define _STL_CONSTRUCT_H 1 -#include +#include #include namespace std @@ -149,8 +149,8 @@ namespace std { typedef typename iterator_traits<_ForwardIterator>::value_type _Value_type; - typedef typename __type_traits<_Value_type>::has_trivial_destructor - _Has_trivial_destructor; + typedef typename std::__is_scalar<_Value_type>::__type + _Has_trivial_destructor; std::__destroy_aux(__first, __last, _Has_trivial_destructor()); } diff --git a/libstdc++-v3/include/bits/stl_deque.h b/libstdc++-v3/include/bits/stl_deque.h index b31143898571..27d0304ba041 100644 --- a/libstdc++-v3/include/bits/stl_deque.h +++ b/libstdc++-v3/include/bits/stl_deque.h @@ -1,6 +1,6 @@ // Deque implementation -*- C++ -*- -// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +// Copyright (C) 2001, 2002, 2003, 2004, 2005 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 @@ -702,7 +702,7 @@ namespace _GLIBCXX_STD : _Base(__a) { // Check whether it's an integral type. If so, it's not an iterator. - typedef typename _Is_integer<_InputIterator>::_Integral _Integral; + typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_initialize_dispatch(__first, __last, _Integral()); } @@ -755,7 +755,7 @@ namespace _GLIBCXX_STD void assign(_InputIterator __first, _InputIterator __last) { - typedef typename _Is_integer<_InputIterator>::_Integral _Integral; + typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_assign_dispatch(__first, __last, _Integral()); } @@ -1131,7 +1131,7 @@ namespace _GLIBCXX_STD _InputIterator __last) { // Check whether it's an integral type. If so, it's not an iterator. - typedef typename _Is_integer<_InputIterator>::_Integral _Integral; + typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_insert_dispatch(__position, __first, __last, _Integral()); } diff --git a/libstdc++-v3/include/bits/stl_list.h b/libstdc++-v3/include/bits/stl_list.h index bada997b0bbb..b928e00515ba 100644 --- a/libstdc++-v3/include/bits/stl_list.h +++ b/libstdc++-v3/include/bits/stl_list.h @@ -561,7 +561,7 @@ namespace _GLIBCXX_STD assign(_InputIterator __first, _InputIterator __last) { // Check whether it's an integral type. If so, it's not an iterator. - typedef typename _Is_integer<_InputIterator>::_Integral _Integral; + typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_assign_dispatch(__first, __last, _Integral()); } @@ -838,7 +838,7 @@ namespace _GLIBCXX_STD _InputIterator __last) { // Check whether it's an integral type. If so, it's not an iterator. - typedef typename _Is_integer<_InputIterator>::_Integral _Integral; + typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_insert_dispatch(__position, __first, __last, _Integral()); } diff --git a/libstdc++-v3/include/bits/stl_tempbuf.h b/libstdc++-v3/include/bits/stl_tempbuf.h index 399cffb3311c..66ce24052b3a 100644 --- a/libstdc++-v3/include/bits/stl_tempbuf.h +++ b/libstdc++-v3/include/bits/stl_tempbuf.h @@ -1,6 +1,6 @@ // Temporary buffer implementation -*- C++ -*- -// Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc. +// Copyright (C) 2001, 2002, 2004, 2005 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 @@ -145,8 +145,7 @@ namespace std _M_len(0), _M_buffer(0) { // Workaround for a __type_traits bug in the pre-7.3 compiler. - typedef typename __type_traits<_Tp>::has_trivial_default_constructor - _Trivial; + typedef typename std::__is_scalar<_Tp>::__type _Trivial; try { diff --git a/libstdc++-v3/include/bits/stl_uninitialized.h b/libstdc++-v3/include/bits/stl_uninitialized.h index 5c65a26bac10..242ae1519cb8 100644 --- a/libstdc++-v3/include/bits/stl_uninitialized.h +++ b/libstdc++-v3/include/bits/stl_uninitialized.h @@ -1,6 +1,6 @@ // Raw memory manipulators -*- C++ -*- -// Copyright (C) 2001, 2004 Free Software Foundation, Inc. +// Copyright (C) 2001, 2004, 2005 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 @@ -108,7 +108,7 @@ namespace std _ForwardIterator __result) { typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType; - typedef typename __type_traits<_ValueType>::is_POD_type _Is_POD; + typedef typename std::__is_scalar<_ValueType>::__type _Is_POD; return std::__uninitialized_copy_aux(__first, __last, __result, _Is_POD()); } @@ -170,7 +170,7 @@ namespace std const _Tp& __x) { typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType; - typedef typename __type_traits<_ValueType>::is_POD_type _Is_POD; + typedef typename std::__is_scalar<_ValueType>::__type _Is_POD; std::__uninitialized_fill_aux(__first, __last, __x, _Is_POD()); } @@ -214,7 +214,7 @@ namespace std uninitialized_fill_n(_ForwardIterator __first, _Size __n, const _Tp& __x) { typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType; - typedef typename __type_traits<_ValueType>::is_POD_type _Is_POD; + typedef typename std::__is_scalar<_ValueType>::__type _Is_POD; std::__uninitialized_fill_n_aux(__first, __n, __x, _Is_POD()); } diff --git a/libstdc++-v3/include/bits/stl_vector.h b/libstdc++-v3/include/bits/stl_vector.h index 10433f9ad13b..3495d9312ae8 100644 --- a/libstdc++-v3/include/bits/stl_vector.h +++ b/libstdc++-v3/include/bits/stl_vector.h @@ -1,6 +1,6 @@ // Vector implementation -*- C++ -*- -// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +// Copyright (C) 2001, 2002, 2003, 2004, 2005 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 @@ -259,7 +259,7 @@ namespace _GLIBCXX_STD : _Base(__a) { // Check whether it's an integral type. If so, it's not an iterator. - typedef typename _Is_integer<_InputIterator>::_Integral _Integral; + typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_initialize_dispatch(__first, __last, _Integral()); } @@ -316,7 +316,7 @@ namespace _GLIBCXX_STD assign(_InputIterator __first, _InputIterator __last) { // Check whether it's an integral type. If so, it's not an iterator. - typedef typename _Is_integer<_InputIterator>::_Integral _Integral; + typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_assign_dispatch(__first, __last, _Integral()); } @@ -677,7 +677,7 @@ namespace _GLIBCXX_STD _InputIterator __last) { // Check whether it's an integral type. If so, it's not an iterator. - typedef typename _Is_integer<_InputIterator>::_Integral _Integral; + typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_insert_dispatch(__position, __first, __last, _Integral()); } diff --git a/libstdc++-v3/include/bits/type_traits.h b/libstdc++-v3/include/bits/type_traits.h deleted file mode 100644 index 0a263e5e0b6f..000000000000 --- a/libstdc++-v3/include/bits/type_traits.h +++ /dev/null @@ -1,385 +0,0 @@ -// Type traits implementation -*- C++ -*- - -// Copyright (C) 2001, 2004 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 -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// As a special exception, you may use this file as part of a free software -// library without restriction. Specifically, if other files instantiate -// templates or use macros or inline functions from this file, or you compile -// this file and link it with other files to produce an executable, this -// file does not by itself cause the resulting executable to be covered by -// the GNU General Public License. This exception does not however -// invalidate any other reasons why the executable file might be covered by -// the GNU General Public License. - -/* - * - * Copyright (c) 1997 - * Silicon Graphics Computer Systems, Inc. - * - * Permission to use, copy, modify, distribute and sell this software - * and its documentation for any purpose is hereby granted without fee, - * provided that the above copyright notice appear in all copies and - * that both that copyright notice and this permission notice appear - * in supporting documentation. Silicon Graphics makes no - * representations about the suitability of this software for any - * purpose. It is provided "as is" without express or implied warranty. - */ - -/** @file type_traits.h - * This is an internal header file, included by other library headers. - * You should not attempt to use it directly. - */ - -#ifndef _TYPE_TRAITS_H -#define _TYPE_TRAITS_H 1 - -#pragma GCC system_header - -#include - -/* -This header file provides a framework for allowing compile time dispatch -based on type attributes. This is useful when writing template code. -For example, when making a copy of an array of an unknown type, it helps -to know if the type has a trivial copy constructor or not, to help decide -if a memcpy can be used. - -The class template __type_traits provides a series of typedefs each of -which is either __true_type or __false_type. The argument to -__type_traits can be any type. The typedefs within this template will -attain their correct values by one of these means: - 1. The general instantiation contain conservative values which work - for all types. - 2. Specializations may be declared to make distinctions between types. - 3. Some compilers (such as the Silicon Graphics N32 and N64 compilers) - will automatically provide the appropriate specializations for all - types. - -EXAMPLE: - -//Copy an array of elements which have non-trivial copy constructors -template void - copy(_Tp* __source,_Tp* __destination,int __n,__false_type); -//Copy an array of elements which have trivial copy constructors. Use memcpy. -template void - copy(_Tp* __source,_Tp* __destination,int __n,__true_type); - -//Copy an array of any type by using the most efficient copy mechanism -template inline void copy(_Tp* __source,_Tp* __destination,int __n) { - copy(__source,__destination,__n, - typename __type_traits<_Tp>::has_trivial_copy_constructor()); -} -*/ - -struct __true_type {}; -struct __false_type {}; - -template - struct __type_traits - { - typedef __true_type this_dummy_member_must_be_first; - /* Do not remove this member. It informs a compiler which - automatically specializes __type_traits that this - __type_traits template is special. It just makes sure that - things work if an implementation is using a template - called __type_traits for something unrelated. */ - - /* The following restrictions should be observed for the sake of - compilers which automatically produce type specific specializations - of this class: - - You may reorder the members below if you wish - - You may remove any of the members below if you wish - - You must not rename members without making the corresponding - name change in the compiler - - Members you add will be treated like regular members unless - you add the appropriate support in the compiler. */ - - - typedef __false_type has_trivial_default_constructor; - typedef __false_type has_trivial_copy_constructor; - typedef __false_type has_trivial_assignment_operator; - typedef __false_type has_trivial_destructor; - typedef __false_type is_POD_type; - }; - - -// Provide some specializations. - -template<> - struct __type_traits - { - typedef __true_type has_trivial_default_constructor; - typedef __true_type has_trivial_copy_constructor; - typedef __true_type has_trivial_assignment_operator; - typedef __true_type has_trivial_destructor; - typedef __true_type is_POD_type; - }; - -template<> - struct __type_traits - { - typedef __true_type has_trivial_default_constructor; - typedef __true_type has_trivial_copy_constructor; - typedef __true_type has_trivial_assignment_operator; - typedef __true_type has_trivial_destructor; - typedef __true_type is_POD_type; - }; - -template<> - struct __type_traits - { - typedef __true_type has_trivial_default_constructor; - typedef __true_type has_trivial_copy_constructor; - typedef __true_type has_trivial_assignment_operator; - typedef __true_type has_trivial_destructor; - typedef __true_type is_POD_type; - }; - -template<> - struct __type_traits - { - typedef __true_type has_trivial_default_constructor; - typedef __true_type has_trivial_copy_constructor; - typedef __true_type has_trivial_assignment_operator; - typedef __true_type has_trivial_destructor; - typedef __true_type is_POD_type; - }; - -template<> - struct __type_traits - { - typedef __true_type has_trivial_default_constructor; - typedef __true_type has_trivial_copy_constructor; - typedef __true_type has_trivial_assignment_operator; - typedef __true_type has_trivial_destructor; - typedef __true_type is_POD_type; - }; - -template<> - struct __type_traits - { - typedef __true_type has_trivial_default_constructor; - typedef __true_type has_trivial_copy_constructor; - typedef __true_type has_trivial_assignment_operator; - typedef __true_type has_trivial_destructor; - typedef __true_type is_POD_type; - }; - -template<> - struct __type_traits - { - typedef __true_type has_trivial_default_constructor; - typedef __true_type has_trivial_copy_constructor; - typedef __true_type has_trivial_assignment_operator; - typedef __true_type has_trivial_destructor; - typedef __true_type is_POD_type; - }; - -template<> - struct __type_traits - { - typedef __true_type has_trivial_default_constructor; - typedef __true_type has_trivial_copy_constructor; - typedef __true_type has_trivial_assignment_operator; - typedef __true_type has_trivial_destructor; - typedef __true_type is_POD_type; - }; - -template<> - struct __type_traits - { - typedef __true_type has_trivial_default_constructor; - typedef __true_type has_trivial_copy_constructor; - typedef __true_type has_trivial_assignment_operator; - typedef __true_type has_trivial_destructor; - typedef __true_type is_POD_type; - }; - -template<> - struct __type_traits - { - typedef __true_type has_trivial_default_constructor; - typedef __true_type has_trivial_copy_constructor; - typedef __true_type has_trivial_assignment_operator; - typedef __true_type has_trivial_destructor; - typedef __true_type is_POD_type; - }; - -template<> - struct __type_traits - { - typedef __true_type has_trivial_default_constructor; - typedef __true_type has_trivial_copy_constructor; - typedef __true_type has_trivial_assignment_operator; - typedef __true_type has_trivial_destructor; - typedef __true_type is_POD_type; - }; - -template<> - struct __type_traits - { - typedef __true_type has_trivial_default_constructor; - typedef __true_type has_trivial_copy_constructor; - typedef __true_type has_trivial_assignment_operator; - typedef __true_type has_trivial_destructor; - typedef __true_type is_POD_type; - }; - -template<> - struct __type_traits - { - typedef __true_type has_trivial_default_constructor; - typedef __true_type has_trivial_copy_constructor; - typedef __true_type has_trivial_assignment_operator; - typedef __true_type has_trivial_destructor; - typedef __true_type is_POD_type; - }; - -template<> - struct __type_traits - { - typedef __true_type has_trivial_default_constructor; - typedef __true_type has_trivial_copy_constructor; - typedef __true_type has_trivial_assignment_operator; - typedef __true_type has_trivial_destructor; - typedef __true_type is_POD_type; - }; - -template<> - struct __type_traits - { - typedef __true_type has_trivial_default_constructor; - typedef __true_type has_trivial_copy_constructor; - typedef __true_type has_trivial_assignment_operator; - typedef __true_type has_trivial_destructor; - typedef __true_type is_POD_type; - }; - -template<> - struct __type_traits - { - typedef __true_type has_trivial_default_constructor; - typedef __true_type has_trivial_copy_constructor; - typedef __true_type has_trivial_assignment_operator; - typedef __true_type has_trivial_destructor; - typedef __true_type is_POD_type; - }; - -template - struct __type_traits<_Tp*> - { - typedef __true_type has_trivial_default_constructor; - typedef __true_type has_trivial_copy_constructor; - typedef __true_type has_trivial_assignment_operator; - typedef __true_type has_trivial_destructor; - typedef __true_type is_POD_type; - }; - -// The following could be written in terms of numeric_limits. -// We're doing it separately to reduce the number of dependencies. - -template - struct _Is_integer - { - typedef __false_type _Integral; - }; - -template<> - struct _Is_integer - { - typedef __true_type _Integral; - }; - -template<> - struct _Is_integer - { - typedef __true_type _Integral; - }; - -template<> - struct _Is_integer - { - typedef __true_type _Integral; - }; - -template<> - struct _Is_integer - { - typedef __true_type _Integral; - }; - -template<> - struct _Is_integer - { - typedef __true_type _Integral; - }; - -template<> - struct _Is_integer - { - typedef __true_type _Integral; - }; - -template<> - struct _Is_integer - { - typedef __true_type _Integral; - }; - -template<> - struct _Is_integer - { - typedef __true_type _Integral; - }; - -template<> - struct _Is_integer - { - typedef __true_type _Integral; - }; - -template<> - struct _Is_integer - { - typedef __true_type _Integral; - }; - -template<> - struct _Is_integer - { - typedef __true_type _Integral; - }; - -template<> - struct _Is_integer - { - typedef __true_type _Integral; - }; - -template<> - struct _Is_integer - { - typedef __true_type _Integral; - }; - -#endif /* _TYPE_TRAITS_H */ - -// Local Variables: -// mode:C++ -// End: diff --git a/libstdc++-v3/include/debug/debug.h b/libstdc++-v3/include/debug/debug.h index 87bbcfa4db68..94c89e95facf 100644 --- a/libstdc++-v3/include/debug/debug.h +++ b/libstdc++-v3/include/debug/debug.h @@ -1,6 +1,6 @@ // Debugging support implementation -*- C++ -*- -// Copyright (C) 2003 +// Copyright (C) 2003, 2005 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -273,7 +273,7 @@ _GLIBCXX_DEBUG_VERIFY(::std::__is_heap(_First, _Last, _Pred), \ #include // for ptrdiff_t #include // for iterator_traits, categories -#include // for _Is_integer +#include // for __is_integer namespace __gnu_debug { @@ -373,7 +373,7 @@ namespace __gnu_debug inline bool __valid_range(const _InputIterator& __first, const _InputIterator& __last) { - typedef typename _Is_integer<_InputIterator>::_Integral _Integral; + typedef typename std::__is_integer<_InputIterator>::__type _Integral; return __gnu_debug::__valid_range_aux(__first, __last, _Integral()); } diff --git a/libstdc++-v3/include/ext/slist b/libstdc++-v3/include/ext/slist index fb886d8a7b9b..9e099e15c729 100644 --- a/libstdc++-v3/include/ext/slist +++ b/libstdc++-v3/include/ext/slist @@ -1,6 +1,6 @@ // Singly-linked list implementation -*- C++ -*- -// Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc. +// Copyright (C) 2001, 2002, 2004, 2005 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 @@ -403,7 +403,7 @@ namespace __gnu_cxx void assign(_InputIterator __first, _InputIterator __last) { - typedef typename _Is_integer<_InputIterator>::_Integral _Integral; + typedef typename std::__is_integer<_InputIterator>::__type _Integral; _M_assign_dispatch(__first, __last, _Integral()); } @@ -526,7 +526,7 @@ namespace __gnu_cxx _M_insert_after_range(_Node_base* __pos, _InIterator __first, _InIterator __last) { - typedef typename _Is_integer<_InIterator>::_Integral _Integral; + typedef typename std::__is_integer<_InIterator>::__type _Integral; _M_insert_after_range(__pos, __first, __last, _Integral()); } diff --git a/libstdc++-v3/include/std/std_string.h b/libstdc++-v3/include/std/std_string.h index 02fe46e16d3c..d2959f34b278 100644 --- a/libstdc++-v3/include/std/std_string.h +++ b/libstdc++-v3/include/std/std_string.h @@ -1,6 +1,6 @@ // Components for manipulating sequences of characters -*- C++ -*- -// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -45,7 +45,7 @@ #include #include #include // For allocator. -#include +#include #include // For operators >>, <<, and getline decls. #include #include // For less