[[nodiscard]]
constexpr subrange
next(iter_difference_t<I> n = 1) const &
requires forward_iterator<I>; // (1) C++20
constexpr subrange
next(iter_difference_t<I> n = 1) const &
requires forward_iterator<I>; // (1) C++26
[[nodiscard]]
constexpr subrange
next(iter_difference_t<I> n = 1) &&; // (2) C++20
constexpr subrange
next(iter_difference_t<I> n = 1) &&; // (2) C++26
概要
先頭を前進させたsubrange
を得る。
効果
(1)
auto tmp = *this;
tmp.advance(n);
return tmp;
(2)
advance(n);
return std::move(*this);
例
#include <ranges>
#include <iostream>
template<std::ranges::range R>
void print(const R& r) {
for (int x : r) {
std::cout << x << ',';
}
std::cout << '\n';
}
int main()
{
constexpr int a[] = {1, 2, 3, 4, 5};
std::ranges::subrange sub(a + 1, a + 4);
print(sub);
print(sub.next());
print(sub.next().next());
}
21
#include <ranges>
#include <iostream>
template<std::ranges::range R>
void print(const R& r) {
for (int x : r) {
std::cout << x << ',';
}
std::cout << '\n';
}
int main()
{
constexpr int a[] = {1, 2, 3, 4, 5};
std::ranges::subrange sub(a + 1, a + 4);
print(sub);
print(sub.next());
出力
2,3,4,
3,4,
4,
バージョン
言語
- C++20
処理系
- Clang: 13.0.0 ✅
- GCC: 10.1.0 ✅
- ICC: ?
- Visual C++: 2019 Update 10 ✅
参照
- N4861 24 Ranges library
- C++20 ranges
- P2422R1 Remove
nodiscard
annotations from the standard library specification- C++26で
[[nodiscard]]
指定が削除された
- C++26で