// TR1 functional header -*- C++ -*- // Copyright (C) 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. #ifndef _TR1_FUNCTIONAL #define _TR1_FUNCTIONAL 1 #include"../functional" namespace std { namespace tr1 { template class reference_wrapper { _Tp* _M_data; public: typedef _Tp type; explicit reference_wrapper(_Tp& __indata): _M_data(&__indata) { } reference_wrapper(const reference_wrapper<_Tp>& __inref): _M_data(__inref._M_data) { } reference_wrapper& operator=(const reference_wrapper<_Tp>& __inref) { _M_data = __inref._M_data; return *this; } operator _Tp& () const { return this->get(); } _Tp& get() const { return *_M_data; } }; // Denotes a reference should be taken to a variable. template reference_wrapper<_Tp> ref(_Tp& __t) { return reference_wrapper<_Tp>(__t); } // Denotes a const reference should be taken to a variable. template reference_wrapper cref(const _Tp& __t) { return reference_wrapper(__t); } template reference_wrapper<_Tp> ref(reference_wrapper<_Tp> __t) { return ref(__t.get()); } template reference_wrapper cref(reference_wrapper<_Tp> __t) { return cref(__t.get()); } } } #endif