Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-19 08:32:13

0001 // (C) Copyright David Abrahams 2002.
0002 // (C) Copyright Jeremy Siek    2002.
0003 // (C) Copyright Thomas Witt    2002.
0004 // Distributed under the Boost Software License, Version 1.0. (See
0005 // accompanying file LICENSE_1_0.txt or copy at
0006 // http://www.boost.org/LICENSE_1_0.txt)
0007 #ifndef BOOST_INTEROPERABLE_23022003THW_HPP
0008 #define BOOST_INTEROPERABLE_23022003THW_HPP
0009 
0010 #include <type_traits>
0011 #include <boost/iterator/detail/type_traits/disjunction.hpp>
0012 
0013 namespace boost {
0014 namespace iterators {
0015 
0016 //
0017 // Meta function that determines whether two
0018 // iterator types are considered interoperable.
0019 //
0020 // Two iterator types A,B are considered interoperable if either
0021 // A is convertible to B or vice versa.
0022 // This interoperability definition is in sync with the
0023 // standards requirements on constant/mutable container
0024 // iterators (23.1 [lib.container.requirements]).
0025 //
0026 // For compilers that don't support is_convertible
0027 // is_interoperable gives false positives. See comments
0028 // on operator implementation for consequences.
0029 //
0030 template< typename A, typename B >
0031 struct is_interoperable :
0032     public detail::disjunction< std::is_convertible< A, B >, std::is_convertible< B, A > >
0033 {
0034 };
0035 
0036 } // namespace iterators
0037 
0038 using iterators::is_interoperable;
0039 
0040 } // namespace boost
0041 
0042 #endif // BOOST_INTEROPERABLE_23022003THW_HPP