15 class NullBuffer :
public std::streambuf {
17 int overflow(
int c)
override {
return c; }
20 inline static NullBuffer g_null_buffer_;
30using RddElementType = std::ranges::range_value_t<std::ranges::range_value_t<R>>;
33using RddKeyType =
decltype(std::declval<RddElementType<R>>().
first);
36using RddValueType =
decltype(std::declval<RddElementType<R>>().
second);
40template <
typename Iterator>
41struct GetIteratorTagImpl {};
43template <
typename Iterator>
44requires std::forward_iterator<Iterator>
struct GetIteratorTagImpl<Iterator> {
45 using type = std::forward_iterator_tag;
48template <
typename Iterator>
49requires std::bidirectional_iterator<Iterator>
struct GetIteratorTagImpl<Iterator> {
50 using type = std::bidirectional_iterator_tag;
53template <
typename Iterator>
54requires std::random_access_iterator<Iterator>
struct GetIteratorTagImpl<Iterator> {
55 using type = std::random_access_iterator_tag;
61template <
typename Iterator>
62using GetIteratorTagType =
typename GetIteratorTagImpl<Iterator>::type;