boost/parser/detail/text/in_out_result.hpp
// Copyright (C) 2020 T. Zachary Laine // // 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_PARSER_DETAIL_TEXT_IN_OUT_RESULT_HPP #define BOOST_PARSER_DETAIL_TEXT_IN_OUT_RESULT_HPP #include <boost/parser/detail/text/config.hpp> namespace boost::parser::detail { namespace text { /** A replacement for C++20's `std::ranges::in_out_result` for use in pre-C++20 build modes. */ template<typename I, typename O> struct in_out_result { [[no_unique_address]] I in; [[no_unique_address]] O out; }; }} #if BOOST_PARSER_DETAIL_TEXT_USE_CONCEPTS #include <ranges> namespace boost::parser::detail { namespace text { BOOST_PARSER_DETAIL_TEXT_NAMESPACE_V2 { namespace dtl { template<typename R> std::ranges::borrowed_iterator_t<R> result_iterator(R &&); template<typename Ptr> requires std::is_pointer_v<std::remove_reference_t<Ptr>> Ptr result_iterator(Ptr &&); template<typename T> using uc_result_iterator = decltype(dtl::result_iterator(std::declval<T>())); } }}} #endif #endif