summaryrefslogtreecommitdiff
path: root/libcutl/cutl/details/boost/iterator/interoperable.hpp
diff options
context:
space:
mode:
authorJörg Frings-Fürst <debian@jff-webhosting.net>2014-07-23 15:25:44 +0200
committerJörg Frings-Fürst <debian@jff-webhosting.net>2014-07-23 15:25:44 +0200
commit8286ac511144e4f17d34eac9affb97e50646344a (patch)
treef1af7320d7b6be6be059216d0ad08ac7b4f73fd0 /libcutl/cutl/details/boost/iterator/interoperable.hpp
parenta15cf65c44d5c224169c32ef5495b68c758134b7 (diff)
Imported Upstream version 4.0.0upstream/4.0.0
Diffstat (limited to 'libcutl/cutl/details/boost/iterator/interoperable.hpp')
-rw-r--r--libcutl/cutl/details/boost/iterator/interoperable.hpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/libcutl/cutl/details/boost/iterator/interoperable.hpp b/libcutl/cutl/details/boost/iterator/interoperable.hpp
new file mode 100644
index 0000000..1e76e21
--- /dev/null
+++ b/libcutl/cutl/details/boost/iterator/interoperable.hpp
@@ -0,0 +1,50 @@
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Jeremy Siek 2002.
+// (C) Copyright Thomas Witt 2002.
+// 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)
+#ifndef BOOST_INTEROPERABLE_23022003THW_HPP
+# define BOOST_INTEROPERABLE_23022003THW_HPP
+
+# include <cutl/details/boost/mpl/bool.hpp>
+# include <cutl/details/boost/mpl/or.hpp>
+
+# include <cutl/details/boost/type_traits/is_convertible.hpp>
+
+# include <cutl/details/boost/iterator/detail/config_def.hpp> // must appear last
+
+namespace cutl_details_boost
+{
+
+ //
+ // Meta function that determines whether two
+ // iterator types are considered interoperable.
+ //
+ // Two iterator types A,B are considered interoperable if either
+ // A is convertible to B or vice versa.
+ // This interoperability definition is in sync with the
+ // standards requirements on constant/mutable container
+ // iterators (23.1 [lib.container.requirements]).
+ //
+ // For compilers that don't support is_convertible
+ // is_interoperable gives false positives. See comments
+ // on operator implementation for consequences.
+ //
+ template <typename A, typename B>
+ struct is_interoperable
+# ifdef BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY
+ : mpl::true_
+# else
+ : mpl::or_<
+ is_convertible< A, B >
+ , is_convertible< B, A > >
+# endif
+ {
+ };
+
+} // namespace cutl_details_boost
+
+# include <cutl/details/boost/iterator/detail/config_undef.hpp>
+
+#endif // BOOST_INTEROPERABLE_23022003THW_HPP