8#ifndef INCLUDED_BDLB_PAIRUTIL
9#define INCLUDED_BDLB_PAIRUTIL
154#include <bdlscm_version.h>
161#ifdef BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES
162#include <bsl_ranges.h>
165#include <bsl_utility.h>
171#ifdef BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES
182struct PairUtil_StdPairRefAdaptor {
188 template <
class t_FIRST,
class t_SECOND>
189 constexpr std::pair<t_FIRST&, t_SECOND&> operator()(
191 template <
class t_FIRST,
class t_SECOND>
192 constexpr std::pair<const t_FIRST&, const t_SECOND&> operator()(
204struct PairUtil_AdaptForRangesClosure {
210 template <
class t_RANGE_BSL_PAIR>
211 auto operator()(t_RANGE_BSL_PAIR&& bslRange)
const
212 ->
decltype(bsl::views::transform(
213 bsl::forward<t_RANGE_BSL_PAIR>(bslRange),
214 std::declval<const PairUtil_StdPairRefAdaptor&>()));
229#ifdef BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES
235 static constexpr PairUtil_StdPairRefAdaptor stdPairRefAdaptor{};
241 static constexpr PairUtil_AdaptForRangesClosure adaptForRanges{};
248 template <
class t_FIRST,
class t_SECOND>
259#ifdef BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES
264template <
class t_RANGE_BSL_PAIR>
265auto operator|(t_RANGE_BSL_PAIR&& bslRange,
266 const PairUtil_AdaptForRangesClosure&)
267 ->
decltype(PairUtil::adaptForRanges(
268 bsl::forward<t_RANGE_BSL_PAIR>(bslRange)));
279#ifdef BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES
281template <
class t_FIRST,
class t_SECOND>
283constexpr std::pair<t_FIRST&, t_SECOND&>
284PairUtil_StdPairRefAdaptor::operator()(
293template <
class t_FIRST,
class t_SECOND>
295constexpr std::pair<const t_FIRST&, const t_SECOND&>
296PairUtil_StdPairRefAdaptor::operator()(
310#ifdef BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES
311template <
class t_RANGE_BSL_PAIR>
313PairUtil_AdaptForRangesClosure::operator()(t_RANGE_BSL_PAIR&& bslRange)
const
314 ->
decltype(bsl::views::transform(
315 bsl::forward<t_RANGE_BSL_PAIR>(bslRange),
316 std::declval<const PairUtil_StdPairRefAdaptor&>()))
318 return bsl::forward<t_RANGE_BSL_PAIR>(bslRange)
319 | bsl::views::transform(PairUtil::stdPairRefAdaptor);
328template <
class t_FIRST,
class t_SECOND>
337#ifdef BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES
338template <
class t_RANGE_BSL_PAIR>
339auto operator|(t_RANGE_BSL_PAIR&& bslRange,
340 const PairUtil_AdaptForRangesClosure&)
341 ->
decltype(PairUtil::adaptForRanges(
342 bsl::forward<t_RANGE_BSL_PAIR>(bslRange)))
344 return PairUtil::adaptForRanges(bsl::forward<t_RANGE_BSL_PAIR>(bslRange));
Definition bslstl_pair.h:1280
#define BSLMF_ASSERT(expr)
Definition bslmf_assert.h:231
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bdlb_algorithmworkaroundutil.h:74
Definition bdlb_pairutil.h:227
static bsl::pair< t_FIRST &, t_SECOND & > tie(t_FIRST &first, t_SECOND &second)
Definition bdlb_pairutil.h:330
TYPE first
Definition bslstl_pair.h:587
TYPE second
Definition bslstl_pair.h:933