ndnboost: Include boost::iostreams for internal use.
diff --git a/include/ndnboost/iostreams/detail/access_control.hpp b/include/ndnboost/iostreams/detail/access_control.hpp
new file mode 100644
index 0000000..f06afa5
--- /dev/null
+++ b/include/ndnboost/iostreams/detail/access_control.hpp
@@ -0,0 +1,87 @@
+// (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 NDNBOOST_IOSTREAMS_ACCESS_CONTROL_HPP_INCLUDED
+#define NDNBOOST_IOSTREAMS_ACCESS_CONTROL_HPP_INCLUDED
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+# pragma once
+#endif
+
+#include <ndnboost/iostreams/detail/select.hpp>
+#include <ndnboost/mpl/identity.hpp>
+#include <ndnboost/type_traits/is_same.hpp>
+
+namespace ndnboost { 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
+ ::ndnboost::is_same<
+ Access, protected_
+ >, prot_<T>,
+ ::ndnboost::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 NDNBOOST_IOSTREAMS_ACCESS_CONTROL_HPP_INCLUDED