| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | // (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.// Contains the definition of the class template access_control, which// allows the type of inheritance from a provided base class to be specified // using a template parameter.#ifndef BOOST_IOSTREAMS_ACCESS_CONTROL_HPP_INCLUDED#define BOOST_IOSTREAMS_ACCESS_CONTROL_HPP_INCLUDED#if defined(_MSC_VER)# pragma once#endif              #include <boost/iostreams/detail/select.hpp>#include <boost/mpl/identity.hpp>#include <boost/type_traits/is_same.hpp>namespace boost { namespace iostreams {struct protected_ { };  // Represents protected inheritance.struct public_ { };     // Represents public inheritance.namespace detail {    // Implements protected inheritance.    template<typename U>    struct prot_ : protected U     {         prot_() { }        template<typename V> prot_(V v) : U(v) { }    };    // Implements public inheritance.    template<typename U> struct pub_ : public U {         pub_() { }        template<typename V> pub_(V v) : U(v) { }    };//// Used to deduce the base type for the template access_control.//template<typename T, typename Access>struct access_control_base {    typedef int                                 bad_access_specifier;    typedef typename             iostreams::select<  // Disambiguation for Tru64                ::boost::is_same<                    Access, protected_                >,                              prot_<T>,                ::boost::is_same<                    Access, public_                >,                              pub_<T>,                else_,                          bad_access_specifier            >::type                             type;};} // End namespace detail.//// Template name: access_control.// Description: Allows the type of inheritance from a provided base class//      to be specified using an int template parameter.// Template parameters://      Base - The class from which to inherit (indirectly.)//      Access - The type of access desired. Must be one of the //          values access_base::prot or access_base::pub.//template< typename T, typename Access,          typename Base = // VC6 workaraound (Compiler Error C2516)              typename detail::access_control_base<T, Access>::type >struct access_control : public Base {     access_control() { }    template<typename U> explicit access_control(U u) : Base(u) { }};//----------------------------------------------------------------------------//} } // End namespaces iostreams, boost.#endif // #ifndef BOOST_IOSTREAMS_ACCESS_CONTROL_HPP_INCLUDED
 |