最終更新日時(UTC):
が更新

履歴 編集

type-alias
<ranges>

std::ranges::borrowed_subrange_t(C++20)

namespace std::ranges {
  template<range R>
  using borrowed_subrange_t = conditional_t<borrowed_range<R>, subrange<iterator_t<R>>, dangling>;
}

概要

任意のRange型Rの部分Rangeの型を取得する。ただし、Rborrowed_rangeではない場合、danglingになる。

#include <ranges>
#include <vector>

using namespace std;

template<ranges::range R>
ranges::borrowed_subrange_t<R> my_all(R&& r) {
  auto i = ranges::begin(r);
  auto e = ranges::end(r);
  return {i, e};
}

vector<int> f(){ return {}; }

int main() {
  // borrowed_rangeではないRangeのrvalueが渡された場合、danglingが返る
  auto result1 = my_all(f());
  static_assert(same_as<decltype(result1), ranges::dangling>);

  // lvalueが渡された場合、danglingにはならない
  auto vec = f();
  auto result2 = my_all(vec);
  static_assert(!same_as<decltype(result2), ranges::dangling>);

  // borrowed_rangeのrvalueが渡された場合、danglingにはならない
  auto result3 = my_all(ranges::subrange{vec});
  static_assert(!same_as<decltype(result3), ranges::dangling>);
}

出力

バージョン

言語

  • C++20

処理系

参照