...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
BOOST_STL_INTERFACES_USE_CONCEPTS BOOST_STL_INTERFACES_NAMESPACE_V1 BOOST_STL_INTERFACES_NAMESPACE_V2
namespace boost { namespace stl_interfaces { enum element_layout; } }
BOOST_STL_INTERFACES_STATIC_ASSERT_CONCEPT(type, concept_name) BOOST_STL_INTERFACES_STATIC_ASSERT_ITERATOR_TRAITS(iter, category, concept, value_type, reference, pointer, difference_type)
namespace boost { namespace stl_interfaces { struct access; template<typename Derived, typename IteratorConcept, typename ValueType, typename Reference, typename Pointer, typename DifferenceType> struct iterator_interface; template<typename T> struct proxy_arrow_result; typedef iterator_interface< Derived, IteratorConcept, ValueType, Reference, proxy_arrow_result< Reference >, DifferenceType > proxy_iterator_interface; template<typename IteratorInterface1, typename IteratorInterface2, typename Enable = std::enable_if_t<!v1_dtl::ra_iter<IteratorInterface1>::value> > constexpr auto operator==(IteratorInterface1, IteratorInterface2); template<typename IteratorInterface1, typename IteratorInterface2> constexpr auto operator!=(IteratorInterface1, IteratorInterface2); template<typename IteratorInterface1, typename IteratorInterface2> constexpr auto operator<(IteratorInterface1, IteratorInterface2); template<typename IteratorInterface1, typename IteratorInterface2> constexpr auto operator<=(IteratorInterface1, IteratorInterface2); template<typename IteratorInterface1, typename IteratorInterface2> constexpr auto operator>(IteratorInterface1, IteratorInterface2); template<typename IteratorInterface1, typename IteratorInterface2> constexpr auto operator>=(IteratorInterface1, IteratorInterface2); template<typename D1, typename D2> constexpr bool operator==(D1 lhs, D2 rhs); template<typename D1, typename D2> constexpr auto operator!=(D1 lhs, D2 rhs); namespace v1_dtl { template<typename Iterator, typename DifferenceType, typename = void> struct plus_eq; template<typename Iterator, typename DifferenceType> struct plus_eq<Iterator, DifferenceType, void_t< decltype(std::declval< Iterator & >()+=std::declval< DifferenceType >())>>; template<typename Iterator, typename = void> struct ra_iter; template<typename Iterator> struct ra_iter<Iterator, void_t< typename Iterator::iterator_concept >>; template<typename D, typename IteratorConcept, typename ValueType, typename Reference, typename Pointer, typename DifferenceType> void derived_iterator(iterator_interface< D, IteratorConcept, ValueType, Reference, Pointer, DifferenceType > const &); } namespace v2_dtl { concept derived_iter; template<typename D, typename IteratorConcept, typename ValueType, typename Reference, typename Pointer, typename DifferenceType> void derived_iterator(v2::iterator_interface< D, IteratorConcept, ValueType, Reference, Pointer, DifferenceType > const &); } } }
namespace boost { namespace stl_interfaces { template<typename BidiIter> constexpr auto operator==(reverse_iterator< BidiIter > lhs, reverse_iterator< BidiIter > rhs); template<typename BidiIter1, typename BidiIter2> constexpr auto operator==(reverse_iterator< BidiIter1 > lhs, reverse_iterator< BidiIter2 > rhs); template<typename BidiIter> auto make_reverse_iterator(BidiIter); } }
namespace boost { namespace stl_interfaces { template<typename Derived, element_layout Contiguity> struct sequence_container_interface; template<typename ContainerInterface> constexpr auto swap(ContainerInterface &, ContainerInterface &); template<typename ContainerInterface> constexpr auto operator==(ContainerInterface const &, ContainerInterface const &); template<typename ContainerInterface> constexpr auto operator!=(ContainerInterface const &, ContainerInterface const &); template<typename ContainerInterface> constexpr auto operator<(ContainerInterface const &, ContainerInterface const &); template<typename ContainerInterface> constexpr auto operator<=(ContainerInterface const &, ContainerInterface const &); template<typename ContainerInterface> constexpr auto operator>(ContainerInterface const &, ContainerInterface const &); template<typename ContainerInterface> constexpr auto operator>=(ContainerInterface const &, ContainerInterface const &); namespace v1_dtl { template<typename D, typename = void> struct clear_impl; template<typename D> struct clear_impl<D, void_t< decltype(std::declval< D >().clear())>>; typedef std::is_convertible< typename std::iterator_traits< Iter >::iterator_category, std::input_iterator_tag > in_iter; template<typename D, element_layout Contiguity> void derived_container(sequence_container_interface< D, Contiguity > const &); } } }
namespace boost { namespace stl_interfaces { template<typename Derived, element_layout Contiguity> struct view_interface; BOOST_STL_INTERFACES_NAMESPACE_V1; BOOST_STL_INTERFACES_NAMESPACE_V2; template<typename ViewInterface> constexpr auto operator!=(ViewInterface, ViewInterface); namespace v1_dtl { template<typename D, element_layout Contiguity> void derived_view(view_interface< D, Contiguity > const &); } } }