An rvalue boost::span doesn't work for algorithms that expect mutable ranges
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 38/100
Línea de trabajo
Compila primero el ejemplo proporcionado y luego inspecciona boost/core/span.hpp y boost/range/algorithm/fill.hpp. Rastrea las sobrecargas de boost::begin y boost::end utilizadas para el rvalue span y compáralas con la ruta de lvalue. Se considera completado cuando los algoritmos mutable aceptan rvalue spans, mientras que el comportamiento de los contenedores permanece sin cambios, con cobertura para ambos casos.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
An rvalue span does not work for algorithms that modify elements. In the following example, using an lvalue span works, but using an rvalue span fails to compile.
#include <vector>
#include <boost/core/span.hpp>
#include <boost/range/algorithm/fill.hpp>
template <typename T>
boost::span<T> to_span( std::vector<T>& v ) {
return v;
}
int main() {
std::vector<unsigned char> vec{ 1, 2, 3, 4, 5 };
boost::span<unsigned char> sp{ vec };
boost::fill( sp, 0 ); // works
boost::fill( to_span(vec), 0); // fails
return 0;
}
It looks to me that the issue is that boost::begin and boost::end have overloads for lvalue ranges and const lvalue ranges but not rvalue ranges, so if you pass an rvalue range to an algorithm, it gets treated as a const lvalue range and has const iterators. That seems to be the right thing to do for containers, but not so much for proxy types like span.
- Lenguaje dominante
- C++
- Estrellas
- 45
- Forks
- 104
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de boostorg/range
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 65/100
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 70/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 35/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
-
Bad is_sorted docs Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 55/100
Todos los issues de boostorg/range
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
ros2/message_filters#338 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
subsurface/subsurface#4984 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
flutter-webrtc/flutter-webrtc#2206 ·
-
litertlm-android AAR ships no consumer ProGuard rules → "mid == null" SIGABRT in minified apps Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
google-ai-edge/LiteRT-LM#3739 ·