# Boost: ref.hpp documentation

# ref.hpp

1.00.0003 (2001-08-22)

## Files

- ref.hpp

## Purpose

The header boost/ref.hpp defines the class template boost::reference_wrapper<T> and the two functions boost::ref and boost::cref that return instances of boost::reference_wrapper<T>.

The purpose of boost::reference_wrapper<T> is to contain a reference to an object of type T. It is primarily used to "feed" references to function templates (algorithms) that take their parameter by value.

To support this usage, boost::reference_wrapper<T> provides an implicit conversion to T &. This usually allows the function templates to work on references unmodified.

boost::reference_wrapper<T> is CopyConstructible, but it is not Assignable.

The expression boost::ref(x) returns a boost::reference_wrapper<X>(x) where X is the type of x. Similarly, boost::cref(x) returns a boost::reference_wrapper<X const>(x).

## Interface

### Synopsis

    namespace boost
    {
        template<class T> class reference_wrapper;
        template<class T> reference_wrapper<T> ref(T & t);
        template<class T> reference_wrapper<T const> cref(T const & t);
    }

### reference_wrapper

    template<class T> class reference_wrapper
    {
    public:

        explicit reference_wrapper(T & t);

        operator T & () const;

        T & get() const;
    };

#### explicit reference_wrapper(T & t)

Effects: Constructs a reference_wrapper object that stores a reference to t.

Throws: Nothing.

#### operator T & () const

Returns: the stored reference.

Throws: Nothing.

#### T & get() const

Returns: the stored reference.

Throws: Nothing.

### ref

    template<class T> reference_wrapper<T> ref(T & t);

Returns: `reference_wrapper<T>(t)`.

Throws: Nothing.

### cref

    template<class T> reference_wrapper<T const> cref(T const & t);

Returns: `reference_wrapper<T const>(t)`.

Throws: Nothing.

## Acknowledgements

ref and cref were originally part of the Boost.Tuple library. They were "promoted to boost:: status" because they are generally useful.

Copyright © 2001 by Peter Dimov and Multi Media Ltd. Permission to copy, use, modify, sell and distribute this document is granted provided this copyright notice appears in all copies. This document is provided "as is" without express or implied warranty, and with no claim as to its suitability for any purpose.