@@ -52,8 +52,8 @@ class ArrayOfArrays : protected ArrayOfArraysView< T, INDEX_TYPE, false, BUFFER_
5252 * @param defaultArrayCapacity the initial capacity of each array.
5353 */
5454 inline
55- ArrayOfArrays ( INDEX_TYPE const numArrays=0 , INDEX_TYPE const defaultArrayCapacity=0 ) LVARRAY_RESTRICT_THIS :
56- ParentClass ()
55+ ArrayOfArrays ( INDEX_TYPE const numArrays=0 , INDEX_TYPE const defaultArrayCapacity=0 ):
56+ ParentClass ( true )
5757 {
5858 resize ( numArrays, defaultArrayCapacity );
5959 setName ( " " );
@@ -65,7 +65,7 @@ class ArrayOfArrays : protected ArrayOfArraysView< T, INDEX_TYPE, false, BUFFER_
6565 */
6666 inline
6767 ArrayOfArrays ( ArrayOfArrays const & src ):
68- ParentClass ()
68+ ParentClass ( true )
6969 { *this = src; }
7070
7171 /* *
@@ -95,9 +95,24 @@ class ArrayOfArrays : protected ArrayOfArraysView< T, INDEX_TYPE, false, BUFFER_
9595 */
9696 constexpr inline
9797 ArrayOfArraysView< T, INDEX_TYPE const , false , BUFFER_TYPE >
98- toView () const LVARRAY_RESTRICT_THIS
98+ toView () const &
9999 { return ParentClass::toView (); }
100100
101+ /* *
102+ * @brief Overload for rvalues that raises a compilation error when used.
103+ * @return A null ArrayOfArraysView.
104+ * @note This cannot be called on a rvalue since the @c ArrayOfArraysView would
105+ * contain the buffer of the current @c ArrayOfArrays that is about to be destroyed.
106+ * This overload prevents that from happening.
107+ */
108+ constexpr inline
109+ ArrayOfArraysView< T, INDEX_TYPE const , false , BUFFER_TYPE >
110+ toView () const &&
111+ {
112+ static_assert ( !typeManipulation::always_true< T >, " Cannot call toView on a rvalue." );
113+ return ParentClass::toView ();
114+ }
115+
101116 /* *
102117 * @copydoc ParentClass::toViewConstSizes
103118 * @note This is just a wrapper around the ArrayOfArraysView method. The reason
@@ -106,9 +121,24 @@ class ArrayOfArrays : protected ArrayOfArraysView< T, INDEX_TYPE, false, BUFFER_
106121 */
107122 constexpr inline
108123 ArrayOfArraysView< T, INDEX_TYPE const , true , BUFFER_TYPE >
109- toViewConstSizes () const LVARRAY_RESTRICT_THIS
124+ toViewConstSizes () const &
110125 { return ParentClass::toViewConstSizes (); }
111126
127+ /* *
128+ * @brief Overload for rvalues that raises a compilation error when used.
129+ * @return A null ArrayOfArraysView.
130+ * @note This cannot be called on a rvalue since the @c ArrayOfArraysView would
131+ * contain the buffer of the current @c ArrayOfArrays that is about to be destroyed.
132+ * This overload prevents that from happening.
133+ */
134+ constexpr inline
135+ ArrayOfArraysView< T, INDEX_TYPE const , true , BUFFER_TYPE >
136+ toViewConstSizes () const &&
137+ {
138+ static_assert ( !typeManipulation::always_true< T >, " Cannot call toViewConstSizes on a rvalue." );
139+ return ParentClass::toViewConstSizes ();
140+ }
141+
112142 /* *
113143 * @copydoc ParentClass::toViewConst
114144 * @note This is just a wrapper around the ArrayOfArraysView method. The reason
@@ -117,9 +147,24 @@ class ArrayOfArrays : protected ArrayOfArraysView< T, INDEX_TYPE, false, BUFFER_
117147 */
118148 constexpr inline
119149 ArrayOfArraysView< T const , INDEX_TYPE const , true , BUFFER_TYPE >
120- toViewConst () const LVARRAY_RESTRICT_THIS
150+ toViewConst () const &
121151 { return ParentClass::toViewConst (); }
122152
153+ /* *
154+ * @brief Overload for rvalues that raises a compilation error when used.
155+ * @return A null ArrayOfArraysView.
156+ * @note This cannot be called on a rvalue since the @c ArrayOfArraysView would
157+ * contain the buffer of the current @c ArrayOfArrays that is about to be destroyed.
158+ * This overload prevents that from happening.
159+ */
160+ constexpr inline
161+ ArrayOfArraysView< T const , INDEX_TYPE const , true , BUFFER_TYPE >
162+ toViewConst () const &&
163+ {
164+ static_assert ( !typeManipulation::always_true< T >, " Cannot call toViewConst on a rvalue." );
165+ return ParentClass::toViewConst ();
166+ }
167+
123168 // /@}
124169
125170 /* *
@@ -133,7 +178,7 @@ class ArrayOfArrays : protected ArrayOfArraysView< T, INDEX_TYPE, false, BUFFER_
133178 * @return *this.
134179 */
135180 inline
136- ArrayOfArrays & operator =( ArrayOfArrays const & src ) LVARRAY_RESTRICT_THIS
181+ ArrayOfArrays & operator =( ArrayOfArrays const & src )
137182 {
138183 ParentClass::setEqualTo ( src.m_numArrays ,
139184 src.m_offsets [ src.m_numArrays ],
@@ -183,7 +228,7 @@ class ArrayOfArrays : protected ArrayOfArraysView< T, INDEX_TYPE, false, BUFFER_
183228 * IS_VALID_EXPRESSION and this fails with NVCC.
184229 */
185230 inline
186- INDEX_TYPE size () const LVARRAY_RESTRICT_THIS
231+ INDEX_TYPE size () const
187232 { return ParentClass::size (); }
188233
189234 using ParentClass::sizeOfArray;
@@ -233,7 +278,7 @@ class ArrayOfArrays : protected ArrayOfArraysView< T, INDEX_TYPE, false, BUFFER_
233278 * @brief Append an array.
234279 * @param n the size of the array.
235280 */
236- void appendArray ( INDEX_TYPE const n ) LVARRAY_RESTRICT_THIS
281+ void appendArray ( INDEX_TYPE const n )
237282 {
238283 LVARRAY_ASSERT ( arrayManipulation::isPositive ( n ) );
239284
@@ -252,7 +297,7 @@ class ArrayOfArrays : protected ArrayOfArraysView< T, INDEX_TYPE, false, BUFFER_
252297 * @param last An iterator to the end of the array to append.
253298 */
254299 template < typename ITER >
255- void appendArray ( ITER const first, ITER const last ) LVARRAY_RESTRICT_THIS
300+ void appendArray ( ITER const first, ITER const last )
256301 {
257302 INDEX_TYPE const maxOffset = this ->m_offsets [ this ->m_numArrays ];
258303 bufferManipulation::emplaceBack ( this ->m_offsets , this ->m_numArrays + 1 , maxOffset );
@@ -312,7 +357,7 @@ class ArrayOfArrays : protected ArrayOfArraysView< T, INDEX_TYPE, false, BUFFER_
312357 * @param args A variadic pack of arguments that are forwarded to construct the new value.
313358 */
314359 template < typename ... ARGS >
315- void emplaceBack ( INDEX_TYPE const i, ARGS && ... args ) LVARRAY_RESTRICT_THIS
360+ void emplaceBack ( INDEX_TYPE const i, ARGS && ... args )
316361 {
317362 dynamicallyGrowArray ( i, 1 );
318363 ParentClass::emplaceBack ( i, std::forward< ARGS >( args )... );
@@ -326,7 +371,7 @@ class ArrayOfArrays : protected ArrayOfArraysView< T, INDEX_TYPE, false, BUFFER_
326371 * @param last An iterator to the end of the values to append.
327372 */
328373 template < typename ITER >
329- void appendToArray ( INDEX_TYPE const i, ITER const first, ITER const last ) LVARRAY_RESTRICT_THIS
374+ void appendToArray ( INDEX_TYPE const i, ITER const first, ITER const last )
330375 {
331376 INDEX_TYPE const n = arrayManipulation::iterDistance ( first, last );
332377 dynamicallyGrowArray ( i, n );
0 commit comments