Skip to content

Commit

Permalink
abstract conjunction.
Browse files Browse the repository at this point in the history
  • Loading branch information
gogagum authored and Georgiy Guminov committed Oct 10, 2024
1 parent c0e687c commit 531555b
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 2 deletions.
53 changes: 53 additions & 0 deletions include/boost/iterator/detail/type_traits/conjunction.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/*
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
* https://www.boost.org/LICENSE_1_0.txt)
*
* Copyright (c) 2024 Georgiy Guminov
*/
/*!
* \file iterator/detail/type_traits/conjunction.hpp
*
* This header contains definition of \c conjunction type trait.
*/

#ifndef BOOST_ITERATOR_DETAIL_TYPE_TRAITS_CONJUNCTION_HPP_INCLUDED_
#define BOOST_ITERATOR_DETAIL_TYPE_TRAITS_CONJUNCTION_HPP_INCLUDED_

#include <type_traits>
#include <boost/config.hpp>

#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif

#if (defined(__cpp_lib_logical_traits) && (__cpp_lib_logical_traits >= 201510l)) || \
(defined(BOOST_MSSTL_VERSION) && (BOOST_MSSTL_VERSION >= 140) && (_MSC_FULL_VER >= 190023918) && (BOOST_CXX_VERSION >= 201703l))

namespace boost {
namespace iterators {
namespace detail {

using std::conjunction;

} // namespace detail
} // namespace iterator
} // namespace boost

#else

#include <boost/type_traits/conjunction.hpp>

namespace boost {
namespace iterators {
namespace detail {

using boost::conjunction;

} // namespace detail
} // namespace iterator
} // namespace boost

#endif

#endif // BOOST_ITERATOR_DETAIL_TYPE_TRAITS_CONJUNCTION_HPP_INCLUDED_
4 changes: 2 additions & 2 deletions include/boost/iterator/is_iterator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
#include <cstddef>
#include <boost/config.hpp>
#include <boost/type_traits/is_complete.hpp>
#include <boost/type_traits/conjunction.hpp>
#include <boost/iterator/detail/type_traits/conjunction.hpp>
#if !defined(BOOST_NO_CXX17_ITERATOR_TRAITS)
#include <iterator>
#endif
Expand Down Expand Up @@ -67,7 +67,7 @@ struct is_iterator_impl :

template< typename T >
struct is_iterator_impl< T* > :
public boost::conjunction<
public conjunction<
boost::is_complete<T>,
std::integral_constant<bool, !std::is_function<T>::value>
>::type
Expand Down

0 comments on commit 531555b

Please sign in to comment.