| Home | Libraries | People | FAQ | More

## Class old_value

boost::contract::old_value — Convert user-specified expressions to old values.

## Synopsis

    // In header: <boost/contract/old.hpp>

    class old_value {
    public:
      // construct/copy/destruct
      template<typename T>
        old_value(T const &,
                  typename boost::enable_if< boost::contract::is_old_value_copyable< T > >::type * = 0);
      template<typename T>
        old_value(T const &,
                  typename boost::disable_if< boost::contract::is_old_value_copyable< T > >::type * = 0);
    };

## Description

This class is usually only implicitly used by this library and it does not explicitly appear in user code.

On older compilers that cannot correctly deduce the `boost::contract::is_old_value_copyable` trait used in the declaration of this class, programmers can manually specialize that trait to make sure that only old value types that are copyable are actually copied.

See Also:

Old Value Requirements

### `old_value` public construct/copy/destruct

1.     template<typename T>
         old_value(T const & old,
                   typename boost::enable_if< boost::contract::is_old_value_copyable< T > >::type * = 0);

   Construct this object from the specified old value when the old value type is copy constructible.

   The specified old value `old` is copied (one time only) using ``boost::contract::old_value_copy``, in which case the related old value pointer will not be null (but no copy is made if postconditions and exception guarantees are not being checked, see ``BOOST_CONTRACT_NO_OLDS``).

   Parameters:

   `old` | Old value to be copied.

   Template Parameters:

   `T` | Old value type.

2.     template<typename T>
         old_value(T const & old,
                   typename boost::disable_if< boost::contract::is_old_value_copyable< T > >::type * = 0);

   Construct this object from the specified old value when the old value type is not copyable.

   The specified old value `old` cannot be copied in this case so it is not copied and the related old value pointer will always be null (thus calls to this constructor have no effect and they will likely be optimized away by most compilers).

   Parameters:

   `old` | Old value (that will not be copied in this case).

   Template Parameters:

   `T` | Old value type.