diff options
-rw-r--r-- | libstdc++-v3/ChangeLog | 13 | ||||
-rw-r--r-- | libstdc++-v3/include/Makefile.am | 1 | ||||
-rw-r--r-- | libstdc++-v3/include/Makefile.in | 1 | ||||
-rw-r--r-- | libstdc++-v3/include/tr1/ref_fwd.h | 59 | ||||
-rw-r--r-- | libstdc++-v3/include/tr1/tuple | 684 | ||||
-rw-r--r-- | libstdc++-v3/include/tr1/tuple_defs.h | 114 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/make_tuple.cc | 3 |
7 files changed, 366 insertions, 509 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index dbb4714..68055f6 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,16 @@ +2007-03-13 Paolo Carlini <pcarlini@suse.de> + + * include/tr1/tuple: Only include <utility> for std::pair, and + forward declare reference_wrapper; formatting fixes. + * include/tr1/ref_fwd.h: Remove. + * include/tr1/tuple_defs.h: Remove, unused. + * include/Makefile.am: Update. + * include/Makefile.in: Regenerate. + * testsuite/tr1/6_containers/tuple/creation_functions/make_tuple.cc: + Include <tr1/functional> too. + + * include/tr1/tuple: Define tuple_size<tuple<_Elements...> >::value. + 2007-03-12 Stephen M. Webb <stephen.webb@bregmasoft.com> * include/tr1/regex: Add "boilerplate" implementations. diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am index 87c4f97..9cc39c1 100644 --- a/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am @@ -566,7 +566,6 @@ tr1_headers = \ ${tr1_srcdir}/memory \ ${tr1_srcdir}/random \ ${tr1_srcdir}/random.tcc \ - ${tr1_srcdir}/ref_fwd.h \ ${tr1_srcdir}/regex \ ${tr1_srcdir}/stdarg.h \ ${tr1_srcdir}/stdbool.h \ diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in index d1feae1..2f8417a 100644 --- a/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in @@ -796,7 +796,6 @@ tr1_headers = \ ${tr1_srcdir}/memory \ ${tr1_srcdir}/random \ ${tr1_srcdir}/random.tcc \ - ${tr1_srcdir}/ref_fwd.h \ ${tr1_srcdir}/regex \ ${tr1_srcdir}/stdarg.h \ ${tr1_srcdir}/stdbool.h \ diff --git a/libstdc++-v3/include/tr1/ref_fwd.h b/libstdc++-v3/include/tr1/ref_fwd.h deleted file mode 100644 index 96e2b27..0000000 --- a/libstdc++-v3/include/tr1/ref_fwd.h +++ /dev/null @@ -1,59 +0,0 @@ - - -// class template reference_wrapper forwarding header -*- C++ -*- - -// Copyright (C) 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 -// 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, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -// 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. - -/** @file tr1/ref_fwd.h - * This is an internal header file, included by other library headers. - * You should not attempt to use it directly. - */ - -// Douglas Gregor <doug.gregor -at- gmail.com> -#ifndef _TR1_REF_FWD -#define _TR1_REF_FWD - -namespace std -{ -_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) - -template<typename _Tp> - class reference_wrapper; - -template<typename _Tp> - reference_wrapper<_Tp> - ref(_Tp& __t); - - // Denotes a const reference should be taken to a variable. -template<typename _Tp> - reference_wrapper<const _Tp> - cref(const _Tp& __t); - -_GLIBCXX_END_NAMESPACE -} -#endif diff --git a/libstdc++-v3/include/tr1/tuple b/libstdc++-v3/include/tr1/tuple index 96ba4b8..4e1a2d4 100644 --- a/libstdc++-v3/include/tr1/tuple +++ b/libstdc++-v3/include/tr1/tuple @@ -1,6 +1,6 @@ // class template tuple -*- C++ -*- -// Copyright (C) 2004, 2005 Free Software Foundation, Inc. +// Copyright (C) 2004, 2005, 2006, 2007 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,329 +39,348 @@ #pragma GCC system_header -#include <tr1/utility> -#include <tr1/ref_fwd.h> -#include <bits/cpp_type_traits.h> // for __enable_if +#include <utility> namespace std { _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) - // Adds a const reference to a non-reference type. - template<typename _Tp> - struct __add_c_ref - { typedef const _Tp& type; }; - - template<typename _Tp> - struct __add_c_ref<_Tp&> - { typedef _Tp& type; }; - - // Adds a reference to a non-reference type. - template<typename _Tp> - struct __add_ref - { typedef _Tp& type; }; - - template<typename _Tp> - struct __add_ref<_Tp&> - { typedef _Tp& type; }; - -/** - * @if maint - * Contains the actual implementation of the @c tuple template, stored - * as a recursive inheritance hierarchy from the first element (most - * derived class) to the last (least derived class). The @c Idx - * parameter gives the 0-based index of the element stored at this - * point in the hierarchy; we use it to implement a constant-time - * get() operation. - * @endif - */ - template<int _Idx, typename... _Elements> - struct _Tuple_impl; - - /** - * @if maint - * Zero-element tuple implementation. This is the basis case for the - * inheritance recursion. - * @endif maint - */ - template<int _Idx> - struct _Tuple_impl<_Idx> { }; - - /** - * @if maint - * Recursive tuple implementation. Here we store the @c Head element - * and derive from a @c Tuple_impl containing the remaining elements - * (which contains the @c Tail). - * @endif - */ - template<int _Idx, typename _Head, typename... _Tail> - struct _Tuple_impl<_Idx, _Head, _Tail...> - : public _Tuple_impl<_Idx+1, _Tail...> - { - typedef _Tuple_impl<_Idx+1, _Tail...> _Inherited; - - _Head _M_head; - - _Inherited& _M_tail() { return *this; } - const _Inherited& _M_tail() const { return *this; } - - _Tuple_impl() : _Inherited(), _M_head() { } - - explicit - _Tuple_impl(typename __add_c_ref<_Head>::type __head, - typename __add_c_ref<_Tail>::type... __tail) - : _Inherited(__tail...), _M_head(__head) { } - - template<typename... _UElements> - _Tuple_impl(const _Tuple_impl<_Idx, _UElements...>& __in) - : _Inherited(__in._M_tail()), _M_head(__in._M_head) { } - - _Tuple_impl(const _Tuple_impl& __in) - : _Inherited(__in._M_tail()), _M_head(__in._M_head) { } + template<typename _Tp> + class reference_wrapper; + + // Adds a const reference to a non-reference type. + template<typename _Tp> + struct __add_c_ref + { typedef const _Tp& type; }; + + template<typename _Tp> + struct __add_c_ref<_Tp&> + { typedef _Tp& type; }; + + // Adds a reference to a non-reference type. + template<typename _Tp> + struct __add_ref + { typedef _Tp& type; }; + + template<typename _Tp> + struct __add_ref<_Tp&> + { typedef _Tp& type; }; + + /** + * @if maint + * Contains the actual implementation of the @c tuple template, stored + * as a recursive inheritance hierarchy from the first element (most + * derived class) to the last (least derived class). The @c Idx + * parameter gives the 0-based index of the element stored at this + * point in the hierarchy; we use it to implement a constant-time + * get() operation. + * @endif + */ + template<int _Idx, typename... _Elements> + struct _Tuple_impl; + + /** + * @if maint + * Zero-element tuple implementation. This is the basis case for the + * inheritance recursion. + * @endif maint + */ + template<int _Idx> + struct _Tuple_impl<_Idx> { }; + + /** + * @if maint + * Recursive tuple implementation. Here we store the @c Head element + * and derive from a @c Tuple_impl containing the remaining elements + * (which contains the @c Tail). + * @endif + */ + template<int _Idx, typename _Head, typename... _Tail> + struct _Tuple_impl<_Idx, _Head, _Tail...> + : public _Tuple_impl<_Idx + 1, _Tail...> + { + typedef _Tuple_impl<_Idx + 1, _Tail...> _Inherited; + + _Head _M_head; + + _Inherited& _M_tail() { return *this; } + const _Inherited& _M_tail() const { return *this; } + + _Tuple_impl() : _Inherited(), _M_head() { } + + explicit + _Tuple_impl(typename __add_c_ref<_Head>::type __head, + typename __add_c_ref<_Tail>::type... __tail) + : _Inherited(__tail...), _M_head(__head) { } + + template<typename... _UElements> + _Tuple_impl(const _Tuple_impl<_Idx, _UElements...>& __in) + : _Inherited(__in._M_tail()), _M_head(__in._M_head) { } + + _Tuple_impl(const _Tuple_impl& __in) + : _Inherited(__in._M_tail()), _M_head(__in._M_head) { } - template<typename... _UElements> - _Tuple_impl& operator=(const _Tuple_impl<_Idx, _UElements...>& __in) - { - _M_head = __in._M_head; - _M_tail() = __in._M_tail(); - return *this; - } - - _Tuple_impl& operator=(const _Tuple_impl& __in) - { - _M_head = __in._M_head; - _M_tail() = __in._M_tail(); - return *this; - } - }; - - template<typename... _Elements> - class tuple : public _Tuple_impl<0, _Elements...> - { - typedef _Tuple_impl<0, _Elements...> _Inherited; - - public: - tuple() : _Inherited() { } - - explicit - tuple(typename __add_c_ref<_Elements>::type... __elements) - : _Inherited(__elements...) { } - - template<typename... _UElements> - tuple(const tuple<_UElements...>& __in) - : _Inherited(__in) { } - - tuple(const tuple& __in) - : _Inherited(__in) { } - - template<typename... _UElements> - tuple& operator=(const tuple<_UElements...>& __in) - { - static_cast<_Inherited&>(*this) = __in; - return *this; - } - - tuple& operator=(const tuple& __in) - { - static_cast<_Inherited&>(*this) = __in; - return *this; - } - }; - - template<> class tuple<> { }; - - // 2-element tuple, with construction and assignment from a pair. - template<typename _T1, typename _T2> - class tuple<_T1, _T2> : public _Tuple_impl<0, _T1, _T2> - { - typedef _Tuple_impl<0, _T1, _T2> _Inherited; - - public: - tuple() : _Inherited() { } - - explicit - tuple(typename __add_c_ref<_T1>::type __a1, - typename __add_c_ref<_T2>::type __a2) - : _Inherited(__a1, __a2) { } - - template<typename _U1, typename _U2> - tuple(const tuple<_U1, _U2>& __in) - : _Inherited(__in) { } - - tuple(const tuple& __in) - : _Inherited(__in) { } - - template<typename _U1, typename _U2> - tuple(const pair<_U1, _U2>& __in) - : _Inherited( - _Tuple_impl<0, - typename __add_c_ref<_U1>::type, - typename __add_c_ref<_U2>::type>(__in.first, - __in.second)) - { - } + template<typename... _UElements> + _Tuple_impl& + operator=(const _Tuple_impl<_Idx, _UElements...>& __in) + { + _M_head = __in._M_head; + _M_tail() = __in._M_tail(); + return *this; + } + + _Tuple_impl& + operator=(const _Tuple_impl& __in) + { + _M_head = __in._M_head; + _M_tail() = __in._M_tail(); + return *this; + } + }; + + template<typename... _Elements> + class tuple : public _Tuple_impl<0, _Elements...> + { + typedef _Tuple_impl<0, _Elements...> _Inherited; + + public: + tuple() : _Inherited() { } + + explicit + tuple(typename __add_c_ref<_Elements>::type... __elements) + : _Inherited(__elements...) { } + + template<typename... _UElements> + tuple(const tuple<_UElements...>& __in) + : _Inherited(__in) { } + + tuple(const tuple& __in) + : _Inherited(__in) { } + + template<typename... _UElements> + tuple& + operator=(const tuple<_UElements...>& __in) + { + static_cast<_Inherited&>(*this) = __in; + return *this; + } + + tuple& + operator=(const tuple& __in) + { + static_cast<_Inherited&>(*this) = __in; + return *this; + } + }; + + template<> class tuple<> { }; + + // 2-element tuple, with construction and assignment from a pair. + template<typename _T1, typename _T2> + class tuple<_T1, _T2> : public _Tuple_impl<0, _T1, _T2> + { + typedef _Tuple_impl<0, _T1, _T2> _Inherited; + + public: + tuple() : _Inherited() { } + + explicit + tuple(typename __add_c_ref<_T1>::type __a1, + typename __add_c_ref<_T2>::type __a2) + : _Inherited(__a1, __a2) { } + + template<typename _U1, typename _U2> + tuple(const tuple<_U1, _U2>& __in) + : _Inherited(__in) { } + + tuple(const tuple& __in) + : _Inherited(__in) { } + + template<typename _U1, typename _U2> + tuple(const pair<_U1, _U2>& __in) + : _Inherited(_Tuple_impl<0, + typename __add_c_ref<_U1>::type, + typename __add_c_ref<_U2>::type>(__in.first, + __in.second)) + { } - template<typename _U1, typename _U2> - tuple& operator=(const tuple<_U1, _U2>& __in) - { - static_cast<_Inherited&>(*this) = __in; - return *this; - } - - tuple& operator=(const tuple& __in) - { - static_cast<_Inherited&>(*this) = __in; - return *this; - } - - template<typename _U1, typename _U2> - tuple& operator=(const pair<_U1, _U2>& __in) - { - this->_M_head = __in.first; - this->_M_tail()._M_head = __in.second; - return *this; - } - }; - - - /// Gives the type of the ith element of a given tuple type. - template<int __i, typename _Tp> - struct tuple_element; - - /** - * @if maint - * Recursive case for tuple_element: strip off the first element in - * the tuple and retrieve the (i-1)th element of the remaining tuple. - * @endif - */ - template<int __i, typename _Head, typename... _Tail> - struct tuple_element<__i, tuple<_Head, _Tail...> > - : tuple_element<__i - 1, tuple<_Tail...> > { }; - - /** - * @if maint - * Basis case for tuple_element: The first element is the one we're seeking. - * @endif - */ - template<typename _Head, typename... _Tail> - struct tuple_element<0, tuple<_Head, _Tail...> > - { - typedef _Head type; - }; - - /// Finds the size of a given tuple type. - template<typename _Tp> - struct tuple_size; + template<typename _U1, typename _U2> + tuple& + operator=(const tuple<_U1, _U2>& __in) + { + static_cast<_Inherited&>(*this) = __in; + return *this; + } + + tuple& + operator=(const tuple& __in) + { + static_cast<_Inherited&>(*this) = __in; + return *this; + } + + template<typename _U1, typename _U2> + tuple& + operator=(const pair<_U1, _U2>& __in) + { + this->_M_head = __in.first; + this->_M_tail()._M_head = __in.second; + return *this; + } + }; + + + /// Gives the type of the ith element of a given tuple type. + template<int __i, typename _Tp> + struct tuple_element; + + /** + * @if maint + * Recursive case for tuple_element: strip off the first element in + * the tuple and retrieve the (i-1)th element of the remaining tuple. + * @endif + */ + template<int __i, typename _Head, typename... _Tail> + struct tuple_element<__i, tuple<_Head, _Tail...> > + : tuple_element<__i - 1, tuple<_Tail...> > { }; + + /** + * @if maint + * Basis case for tuple_element: The first element is the one we're seeking. + * @endif + */ + template<typename _Head, typename... _Tail> + struct tuple_element<0, tuple<_Head, _Tail...> > + { + typedef _Head type; + }; + + /// Finds the size of a given tuple type. + template<typename _Tp> + struct tuple_size; /// @brief class tuple_size - template<typename... _Elements> - struct tuple_size<tuple<_Elements...> > - { - static const int value = sizeof...(_Elements); - }; - - // Returns a const reference to the ith element of a tuple. - // Any const or non-const ref elements are returned with their original type. - template<int __i, typename _Head, typename... _Tail> - inline typename __add_ref<_Head>::type - get(_Tuple_impl<__i, _Head, _Tail...>& __t) - { - return __t._M_head; - } - - template<int __i, typename _Head, typename... _Tail> - inline typename __add_c_ref<_Head>::type - get(const _Tuple_impl<__i, _Head, _Tail...>& __t) - { - return __t._M_head; - } - - // This class helps construct the various comparison operations on tuples - template<int __check_equal_size, int __i, int __j, typename _Tp, typename _Up> - struct __tuple_compare; - - template<int __i, int __j, typename _Tp, typename _Up> - struct __tuple_compare<0, __i, __j, _Tp, _Up> - { - static bool __eq(const _Tp& __t, const _Up& __u) - { - return get<__i>(__t) == get<__i>(__u) && - __tuple_compare<0, __i+1, __j, _Tp, _Up>::__eq(__t, __u); - } - static bool __less(const _Tp& __t, const _Up& __u) - { - return (get<__i>(__t) < get<__i>(__u)) || !(get<__i>(__u) < get<__i>(__t)) && - __tuple_compare<0, __i+1, __j, _Tp, _Up>::__less(__t, __u); - } - }; - - template<int __i, typename _Tp, typename _Up> - struct __tuple_compare<0, __i, __i, _Tp, _Up> - { - static bool __eq(const _Tp&, const _Up&) - { return true; } - static bool __less(const _Tp&, const _Up&) - { return false; } - }; - - template<typename... _TElements, typename... _UElements> - bool - operator==(const tuple<_TElements...>& __t, const tuple<_UElements...>& __u) - { - typedef tuple<_TElements...> _Tp; - typedef tuple<_UElements...> _Up; - return __tuple_compare<tuple_size<_Tp>::value - tuple_size<_Tp>::value, 0, - tuple_size<_Tp>::value, _Tp, _Up>::__eq(__t, __u); - } - - template<typename... _TElements, typename... _UElements> - bool - operator<(const tuple<_TElements...>& __t, const tuple<_UElements...>& __u) - { - typedef tuple<_TElements...> _Tp; - typedef tuple<_UElements...> _Up; - return __tuple_compare<tuple_size<_Tp>::value - tuple_size<_Tp>::value, 0, - tuple_size<_Tp>::value, _Tp, _Up>::__less(__t, __u); - } - - template<typename... _TElements, typename... _UElements> - bool - operator!=(const tuple<_TElements...>& __t, const tuple<_UElements...>& __u) - { return !(__t == __u); } - - template<typename... _TElements, typename... _UElements> - bool - operator>(const tuple<_TElements...>& __t, const tuple<_UElements...>& __u) - { return __u < __t; } - - template<typename... _TElements, typename... _UElements> - bool - operator<=(const tuple<_TElements...>& __t, const tuple<_UElements...>& __u) - { return !(__u < __t); } - - template<typename... _TElements, typename... _UElements> - bool - operator>=(const tuple<_TElements...>& __t, const tuple<_UElements...>& __u) - { return !(__t < __u); } - - // Helper which adds a reference to a type when given a reference_wrapper - template<typename _Tp> - struct __strip_reference_wrapper - { - typedef _Tp __type; - }; - - template<typename _Tp> - struct __strip_reference_wrapper<reference_wrapper<_Tp> > - { - typedef _Tp& __type; - }; - - template<typename _Tp> - struct __strip_reference_wrapper<const reference_wrapper<_Tp> > - { - typedef _Tp& __type; - }; + template<typename... _Elements> + struct tuple_size<tuple<_Elements...> > + { + static const int value = sizeof...(_Elements); + }; + + template<typename... _Elements> + const int tuple_size<tuple<_Elements...> >::value; + + // Returns a const reference to the ith element of a tuple. + // Any const or non-const ref elements are returned with their original type. + template<int __i, typename _Head, typename... _Tail> + inline typename __add_ref<_Head>::type + get(_Tuple_impl<__i, _Head, _Tail...>& __t) + { + return __t._M_head; + } + + template<int __i, typename _Head, typename... _Tail> + inline typename __add_c_ref<_Head>::type + get(const _Tuple_impl<__i, _Head, _Tail...>& __t) + { + return __t._M_head; + } + + // This class helps construct the various comparison operations on tuples + template<int __check_equal_size, int __i, int __j, + typename _Tp, typename _Up> + struct __tuple_compare; + + template<int __i, int __j, typename _Tp, typename _Up> + struct __tuple_compare<0, __i, __j, _Tp, _Up> + { + static bool __eq(const _Tp& __t, const _Up& __u) + { + return (get<__i>(__t) == get<__i>(__u) && + __tuple_compare<0, __i+1, __j, _Tp, _Up>::__eq(__t, __u)); + } + + static bool __less(const _Tp& __t, const _Up& __u) + { + return ((get<__i>(__t) < get<__i>(__u)) + || !(get<__i>(__u) < get<__i>(__t)) && + __tuple_compare<0, __i+1, __j, _Tp, _Up>::__less(__t, __u)); + } + }; + + template<int __i, typename _Tp, typename _Up> + struct __tuple_compare<0, __i, __i, _Tp, _Up> + { + static bool __eq(const _Tp&, const _Up&) + { return true; } + + static bool __less(const _Tp&, const _Up&) + { return false; } + }; + + template<typename... _TElements, typename... _UElements> + bool + operator==(const tuple<_TElements...>& __t, + const tuple<_UElements...>& __u) + { + typedef tuple<_TElements...> _Tp; + typedef tuple<_UElements...> _Up; + return (__tuple_compare<tuple_size<_Tp>::value - tuple_size<_Tp>::value, + 0, tuple_size<_Tp>::value, _Tp, _Up>::__eq(__t, __u)); + } + + template<typename... _TElements, typename... _UElements> + bool + operator<(const tuple<_TElements...>& __t, + const tuple<_UElements...>& __u) + { + typedef tuple<_TElements...> _Tp; + typedef tuple<_UElements...> _Up; + return (__tuple_compare<tuple_size<_Tp>::value - tuple_size<_Tp>::value, + 0, tuple_size<_Tp>::value, _Tp, _Up>::__less(__t, __u)); + } + + template<typename... _TElements, typename... _UElements> + bool + operator!=(const tuple<_TElements...>& __t, + const tuple<_UElements...>& __u) + { return !(__t == __u); } + + template<typename... _TElements, typename... _UElements> + bool + operator>(const tuple<_TElements...>& __t, + const tuple<_UElements...>& __u) + { return __u < __t; } + + template<typename... _TElements, typename... _UElements> + bool + operator<=(const tuple<_TElements...>& __t, + const tuple<_UElements...>& __u) + { return !(__u < __t); } + + template<typename... _TElements, typename... _UElements> + bool + operator>=(const tuple<_TElements...>& __t, + const tuple<_UElements...>& __u) + { return !(__t < __u); } + + // Helper which adds a reference to a type when given a reference_wrapper + template<typename _Tp> + struct __strip_reference_wrapper + { + typedef _Tp __type; + }; + + template<typename _Tp> + struct __strip_reference_wrapper<reference_wrapper<_Tp> > + { + typedef _Tp& __type; + }; + + template<typename _Tp> + struct __strip_reference_wrapper<const reference_wrapper<_Tp> > + { + typedef _Tp& __type; + }; template<typename... _Elements> inline tuple<typename __strip_reference_wrapper<_Elements>::__type...> @@ -373,30 +392,29 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) } template<typename... _Elements> - inline tuple<_Elements&...> tie(_Elements&... __args) + inline tuple<_Elements&...> + tie(_Elements&... __args) { return tuple<_Elements&...>(__args...); } - // A class (and instance) which can be used in 'tie' when an element - // of a tuple is not required - struct swallow_assign - { - template<class T> - swallow_assign& - operator=(const T&) - { return *this; } - }; - - // TODO: Put this in some kind of shared file. - namespace - { - swallow_assign ignore; - }; // anonymous namespace + // A class (and instance) which can be used in 'tie' when an element + // of a tuple is not required + struct _Swallow_assign + { + template<class _Tp> + _Swallow_assign& + operator=(const _Tp&) + { return *this; } + }; + + // TODO: Put this in some kind of shared file. + namespace + { + _Swallow_assign ignore; + }; // anonymous namespace _GLIBCXX_END_NAMESPACE } -#include <tr1/functional> - #endif diff --git a/libstdc++-v3/include/tr1/tuple_defs.h b/libstdc++-v3/include/tr1/tuple_defs.h deleted file mode 100644 index dba6ccc..0000000 --- a/libstdc++-v3/include/tr1/tuple_defs.h +++ /dev/null @@ -1,114 +0,0 @@ -// class template tuple -*- C++ -*- - -// Copyright (C) 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 -// 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, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -// 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. - -/** @file tr1/tuple_defs.h - * This is an internal header file, included by other library headers. - * You should not attempt to use it directly. - */ - -#ifndef _GLIBCXX_REPEAT_HEADER -# define _GLIBCXX_REPEAT_HEADER "tuple_defs.h" -# include "repeat.h" -# undef _GLIBCXX_REPEAT_HEADER -#endif - -#ifdef _GLIBCXX_LAST_INCLUDE -// Chris Jefferson <chris@bubblescope.net> - template<_GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS> class tuple; - - // Returns a const reference to the ith element of a tuple. - // Any const or non-const ref elements are returned with their original type. - template<int __i, _GLIBCXX_TEMPLATE_PARAMS> - typename __add_ref<typename tuple_element<__i, tuple<_GLIBCXX_TEMPLATE_ARGS> >::type>::type - get(tuple<_GLIBCXX_TEMPLATE_ARGS>& __t) - { - return __get_helper<__i, tuple<_GLIBCXX_TEMPLATE_ARGS> >::get_value(__t); - } - - template<int __i, _GLIBCXX_TEMPLATE_PARAMS> - typename __add_c_ref<typename tuple_element<__i, tuple<_GLIBCXX_TEMPLATE_ARGS> >::type>::type - get(const tuple<_GLIBCXX_TEMPLATE_ARGS>& __t) - { - return __get_helper<__i, tuple<_GLIBCXX_TEMPLATE_ARGS> >::get_value(__t); - } - - template<_GLIBCXX_TEMPLATE_PARAMS, _GLIBCXX_TEMPLATE_PARAMS_U> - bool - operator==(const tuple<_GLIBCXX_TEMPLATE_ARGS>& __t, - const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __u) - { - typedef tuple<_GLIBCXX_TEMPLATE_ARGS> _Tp; - typedef tuple<_GLIBCXX_TEMPLATE_ARGS_U> _Up; - return __tuple_compare<tuple_size<_Tp>::value - tuple_size<_Tp>::value, 0, - tuple_size<_Tp>::value, _Tp, _Up>::__eq(__t, __u); - } - - template<_GLIBCXX_TEMPLATE_PARAMS, _GLIBCXX_TEMPLATE_PARAMS_U> - bool - operator<(const tuple<_GLIBCXX_TEMPLATE_ARGS>& __t, - const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __u) - { - typedef tuple<_GLIBCXX_TEMPLATE_ARGS> _Tp; - typedef tuple<_GLIBCXX_TEMPLATE_ARGS_U> _Up; - return __tuple_compare<tuple_size<_Tp>::value - tuple_size<_Tp>::value, 0, - tuple_size<_Tp>::value, _Tp, _Up>::__less(__t, __u); - } - - template<_GLIBCXX_TEMPLATE_PARAMS, _GLIBCXX_TEMPLATE_PARAMS_U> - bool - operator!=(const tuple<_GLIBCXX_TEMPLATE_ARGS>& __t, - const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __u) - { return !(__t == __u); } - - template<_GLIBCXX_TEMPLATE_PARAMS, _GLIBCXX_TEMPLATE_PARAMS_U> - bool - operator>(const tuple<_GLIBCXX_TEMPLATE_ARGS>& __t, - const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __u) - { return __u < __t; } - - template<_GLIBCXX_TEMPLATE_PARAMS, _GLIBCXX_TEMPLATE_PARAMS_U> - bool - operator<=(const tuple<_GLIBCXX_TEMPLATE_ARGS>& __t, - const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __u) - { return !(__u < __t); } - - template<_GLIBCXX_TEMPLATE_PARAMS, _GLIBCXX_TEMPLATE_PARAMS_U> - bool - operator>=(const tuple<_GLIBCXX_TEMPLATE_ARGS>& __t, - const tuple<_GLIBCXX_TEMPLATE_ARGS_U>& __u) - { return !(__t < __u); } - - template<_GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS> - struct __stripped_tuple_type - { - typedef tuple<_GLIBCXX_TEMPLATE_ARGS_STRIPPED> __type; - }; - -#endif - diff --git a/libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/make_tuple.cc b/libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/make_tuple.cc index 54ff4d2..a599b7e 100644 --- a/libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/make_tuple.cc +++ b/libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/make_tuple.cc @@ -1,6 +1,6 @@ // 2004-09-23 Chris Jefferson <chris@bubblescope.net> -// Copyright (C) 2004 Free Software Foundation, Inc. +// Copyright (C) 2004, 2005, 2006, 2007 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 @@ -21,6 +21,7 @@ // Tuple #include <tr1/tuple> +#include <tr1/functional> #include <testsuite_hooks.h> using namespace std; |