@@ -107,7 +107,7 @@ class reference
107
107
*
108
108
* \return <tt>*this</tt>.
109
109
*/
110
- _CCCL_HOST_DEVICE derived_type& operator =(reference const & other)
110
+ _CCCL_HOST_DEVICE const derived_type& operator =(reference const & other) const
111
111
{
112
112
assign_from (&other);
113
113
return derived ();
@@ -124,21 +124,14 @@ class reference
124
124
*
125
125
* \return <tt>*this</tt>.
126
126
*/
127
- template <typename OtherElement, typename OtherPointer, typename OtherDerived>
128
- _CCCL_HOST_DEVICE
129
- /* ! \cond
130
- */
131
- typename std::enable_if<
132
- std::is_convertible<typename reference<OtherElement, OtherPointer, OtherDerived>::pointer, pointer>::value,
133
- /* ! \endcond
134
- */
135
- derived_type&
136
- /* ! \cond
137
- */
138
- >::type
139
- /* ! \endcond
140
- */
141
- operator =(reference<OtherElement, OtherPointer, OtherDerived> const & other)
127
+ template <
128
+ typename OtherElement,
129
+ typename OtherPointer,
130
+ typename OtherDerived,
131
+ ::cuda::std::enable_if_t <
132
+ ::cuda::std::is_convertible_v<typename reference<OtherElement, OtherPointer, OtherDerived>::pointer, pointer>,
133
+ int > = 0 >
134
+ _CCCL_HOST_DEVICE const derived_type& operator =(reference<OtherElement, OtherPointer, OtherDerived> const & other) const
142
135
{
143
136
assign_from (&other);
144
137
return derived ();
@@ -150,7 +143,7 @@ class reference
150
143
*
151
144
* \return <tt>*this</tt>.
152
145
*/
153
- _CCCL_HOST_DEVICE derived_type& operator =(value_type const & rhs)
146
+ _CCCL_HOST_DEVICE const derived_type& operator =(value_type const & rhs) const
154
147
{
155
148
assign_from (&rhs);
156
149
return derived ();
@@ -323,6 +316,11 @@ class reference
323
316
return static_cast <derived_type&>(*this );
324
317
}
325
318
319
+ _CCCL_HOST_DEVICE const derived_type& derived () const
320
+ {
321
+ return static_cast <const derived_type&>(*this );
322
+ }
323
+
326
324
template <typename System>
327
325
_CCCL_HOST_DEVICE value_type convert_to_value_type (System* system) const
328
326
{
@@ -340,14 +338,14 @@ class reference
340
338
}
341
339
342
340
template <typename System0, typename System1, typename OtherPointer>
343
- _CCCL_HOST_DEVICE void assign_from (System0* system0, System1* system1, OtherPointer src)
341
+ _CCCL_HOST_DEVICE void assign_from (System0* system0, System1* system1, OtherPointer src) const
344
342
{
345
343
using thrust::system ::detail::generic::select_system;
346
344
strip_const_assign_value (select_system (*system0, *system1), src);
347
345
}
348
346
349
347
template <typename OtherPointer>
350
- _CCCL_HOST_DEVICE void assign_from (OtherPointer src)
348
+ _CCCL_HOST_DEVICE void assign_from (OtherPointer src) const
351
349
{
352
350
// Avoid default-constructing systems; instead, just use a null pointer
353
351
// for dispatch. This assumes that `get_value` will not access any system
@@ -358,7 +356,7 @@ class reference
358
356
}
359
357
360
358
template <typename System, typename OtherPointer>
361
- _CCCL_HOST_DEVICE void strip_const_assign_value (System const & system, OtherPointer src)
359
+ _CCCL_HOST_DEVICE void strip_const_assign_value (System const & system, OtherPointer src) const
362
360
{
363
361
System& non_const_system = const_cast <System&>(system );
364
362
@@ -445,7 +443,7 @@ class tagged_reference
445
443
*
446
444
* \return <tt>*this</tt>.
447
445
*/
448
- _CCCL_HOST_DEVICE tagged_reference& operator =(tagged_reference const & other)
446
+ _CCCL_HOST_DEVICE const tagged_reference& operator =(tagged_reference const & other) const
449
447
{
450
448
return base_type::operator =(other);
451
449
}
@@ -461,7 +459,7 @@ class tagged_reference
461
459
* \return <tt>*this</tt>.
462
460
*/
463
461
template <typename OtherElement, typename OtherTag>
464
- _CCCL_HOST_DEVICE tagged_reference& operator =(tagged_reference<OtherElement, OtherTag> const & other)
462
+ _CCCL_HOST_DEVICE const tagged_reference& operator =(tagged_reference<OtherElement, OtherTag> const & other) const
465
463
{
466
464
return base_type::operator =(other);
467
465
}
@@ -472,7 +470,7 @@ class tagged_reference
472
470
*
473
471
* \return <tt>*this</tt>.
474
472
*/
475
- _CCCL_HOST_DEVICE tagged_reference& operator =(value_type const & rhs)
473
+ _CCCL_HOST_DEVICE const tagged_reference& operator =(value_type const & rhs) const
476
474
{
477
475
return base_type::operator =(rhs);
478
476
}
0 commit comments