`transform_iterator` does not work with `std::sort` from libc++ 22
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 58/100
Línea de trabajo
Start with boost/iterator/transform_iterator.hpp and the repro.cpp example, then compare the transform_iterator behavior used by std::sort with the libc++ 22 diagnostic and the linked LLVM issue. Done means the provided C++17 example compiles successfully with libc++ 22 and sorts the wrapped values.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
If the comparator has a templated operator(), sorting through a boost::transform_iterator fails to compile with libc++ 22.
#include <algorithm>
#include <string>
#include <vector>
#include <boost/iterator/transform_iterator.hpp>
template <typename T> struct Wrapper { T item; };
struct Identity {
Wrapper<std::string> &operator()(Wrapper<std::string> &w) const { return w; }
};
struct Cmp {
template <typename T>
bool operator()(const Wrapper<T> &a, const Wrapper<T> &b) const { return a.item < b.item; }
};
int main() {
std::vector<Wrapper<std::string>> v{{"b"}, {"a"}};
typedef boost::transform_iterator<Identity, std::vector<Wrapper<std::string>>::iterator> It;
std::sort(It(v.begin()), It(v.end()), Cmp());
}
$ clang++ -std=c++17 -stdlib=libc++ -c repro.cpp
...
/usr/bin/../include/c++/v1/__algorithm/sift_down.h:55:7: error: no matching function for call to object of type
'Cmp'
55 | if (__comp(__first[__child], __first[__start]))
| ^~~~~~
repro.cpp:14:8: note: candidate template ignored: could not match 'Wrapper' against 'operator_brackets_proxy'
14 | bool operator()(const Wrapper<T> &a, const Wrapper<T> &b) const { return a.item < b.item; }
| ^
...
See also https://github.com/llvm/llvm-project/issues/223290.
- Lenguaje dominante
- C++
- Estrellas
- 23
- Forks
- 70
- 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/iterator
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 58/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 45/100
Todos los issues de boostorg/iterator
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
duckdb/duckdb-wasm#2258 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
objectionary/eo-graphs#75 ·
-
Coarray integration tests carry no LABELS, so run_tests.py silently skips them under every backend Abiertocoarray
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
FISCO-BCOS/FISCO-BCOS#5642 ·