EVOLUTION-MANAGER
Edit File: access_control.hpp
// (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