/usr/include/boost/iostreams/detail
Edit: /usr/include/boost/iostreams/detail/wrap_unwrap.hpp (3328B)
// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
// (C) Copyright 2003-2007 Jonathan Turkanis
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
// See http://www.boost.org/libs/iostreams for documentation.
#ifndef BOOST_IOSTREAMS_DETAIL_WRAP_UNWRAP_HPP_INCLUDED
#define BOOST_IOSTREAMS_DETAIL_WRAP_UNWRAP_HPP_INCLUDED
#if defined(_MSC_VER)
# pragma once
#endif
#include
// SFINAE, MSVC.
#include
#include
#include // is_std_io.
#include
#include
#include
#include
#include
namespace boost { namespace iostreams { namespace detail {
//------------------Definition of wrap/unwrap traits--------------------------//
template
struct wrapped_type
: mpl::if_, reference_wrapper, T>
{ };
template
struct unwrapped_type
: unwrap_reference
{ };
template
struct unwrap_ios
: mpl::eval_if<
is_std_io,
unwrap_reference,
mpl::identity
>
{ };
//------------------Definition of wrap----------------------------------------//
#ifndef BOOST_NO_SFINAE //----------------------------------------------------//
template
inline T wrap(const T& t BOOST_IOSTREAMS_DISABLE_IF_STREAM(T))
{ return t; }
template
inline typename wrapped_type::type
wrap(T& t BOOST_IOSTREAMS_ENABLE_IF_STREAM(T)) { return boost::ref(t); }
#else // #ifndef BOOST_NO_SFINAE //-------------------------------------------//
template
inline typename wrapped_type::type // BCC 5.x needs namespace qualification.
wrap_impl(const T& t, mpl::true_) { return boost::ref(const_cast(t)); }
template
inline typename wrapped_type::type // BCC 5.x needs namespace qualification.
wrap_impl(T& t, mpl::true_) { return boost::ref(t); }
template
inline typename wrapped_type::type
wrap_impl(const T& t, mpl::false_) { return t; }
template
inline typename wrapped_type::type
wrap_impl(T& t, mpl::false_) { return t; }
template
inline typename wrapped_type::type
wrap(const T& t) { return wrap_impl(t, is_std_io()); }
template
inline typename wrapped_type::type
wrap(T& t) { return wrap_impl(t, is_std_io()); }
#endif // #ifndef BOOST_NO_SFINAE //------------------------------------------//
//------------------Definition of unwrap--------------------------------------//
template
typename unwrapped_type::type&
unwrap(const reference_wrapper& ref) { return ref.get(); }
template
typename unwrapped_type::type& unwrap(T& t) { return t; }
template
const typename unwrapped_type::type& unwrap(const T& t) { return t; }
} } } // End namespaces detail, iostreams, boost.
#endif // #ifndef BOOST_IOSTREAMS_DETAIL_WRAP_UNWRAP_HPP_INCLUDED