17
17
#include " subspace/iter/__private/step.h"
18
18
#include " subspace/iter/iterator_defn.h"
19
19
#include " subspace/mem/move.h"
20
+ #include " subspace/mem/relocate.h"
20
21
#include " subspace/ops/ord.h"
21
22
#include " subspace/option/option.h"
22
23
@@ -65,10 +66,9 @@ class RangeIter<Final, T, true> : public ::sus::iter::IteratorImpl<Final, T> {
65
66
66
67
// sus::iter::Iterator trait optional method.
67
68
::sus::iter::SizeHint size_hint () const noexcept final {
68
- Option<::sus::num::usize> steps =
69
- ::sus::iter::__private::steps_between (
70
- static_cast <const Final*>(this )->start,
71
- static_cast<const Final*>(this )->finish);
69
+ Option<::sus::num::usize> steps = ::sus::iter::__private::steps_between (
70
+ static_cast <const Final*>(this )->start ,
71
+ static_cast <const Final*>(this )->finish );
72
72
const ::sus::num::usize lower = steps.is_some () ? *steps : 0_usize;
73
73
return ::sus::iter::SizeHint (lower, ::sus::move (steps));
74
74
}
@@ -181,6 +181,9 @@ class Range final : public __private::RangeIter<Range<T>, T> {
181
181
{
182
182
return start == rhs.start && finish == rhs.finish ;
183
183
}
184
+
185
+ sus_class_trivially_relocatable_if_types (::sus::marker::unsafe_fn,
186
+ decltype (start), decltype(finish));
184
187
};
185
188
186
189
// / A range only bounded inclusively below (`start..`).
@@ -246,6 +249,9 @@ class RangeFrom final : public __private::RangeFromIter<RangeFrom<T>, T> {
246
249
{
247
250
return start == rhs.start ;
248
251
}
252
+
253
+ sus_class_trivially_relocatable_if_types (::sus::marker::unsafe_fn,
254
+ decltype (start));
249
255
};
250
256
251
257
// / A range only bounded exclusively above (`..end`).
@@ -301,6 +307,9 @@ class RangeTo final {
301
307
{
302
308
return finish == rhs.finish ;
303
309
}
310
+
311
+ sus_class_trivially_relocatable_if_types (::sus::marker::unsafe_fn,
312
+ decltype (finish));
304
313
};
305
314
306
315
// / An unbounded range (`..`).
@@ -311,7 +320,7 @@ class RangeTo final {
311
320
// / A RangeFull<usize> can be constructed as a literal as `".."_r`.
312
321
template <class T >
313
322
requires (::sus::ops::Ord<T>)
314
- class RangeFull final {
323
+ class [[sus_trivial_abi]] RangeFull final {
315
324
public:
316
325
RangeFull () = default ;
317
326
@@ -350,6 +359,8 @@ class RangeFull final {
350
359
{
351
360
return true ;
352
361
}
362
+
363
+ sus_class_trivially_relocatable (::sus::marker::unsafe_fn);
353
364
};
354
365
355
366
} // namespace sus::ops
0 commit comments