// (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 #include #include namespace boost { namespace iostreams { struct protected_ { }; // Represents protected inheritance. struct public_ { }; // Represents public inheritance. namespace detail { // Implements protected inheritance. template struct prot_ : protected U { prot_() { } template prot_(V v) : U(v) { } }; // Implements public inheritance. template struct pub_ : public U { pub_() { } template pub_(V v) : U(v) { } }; // // Used to deduce the base type for the template access_control. // template struct access_control_base { typedef int bad_access_specifier; typedef typename iostreams::select< // Disambiguation for Tru64 ::boost::is_same< Access, protected_ >, prot_, ::boost::is_same< Access, public_ >, pub_, 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::type > struct access_control : public Base { access_control() { } template explicit access_control(U u) : Base(u) { } }; //----------------------------------------------------------------------------// } } // End namespaces iostreams, boost. #endif // #ifndef BOOST_IOSTREAMS_ACCESS_CONTROL_HPP_INCLUDED