Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

boost::span cannot be implicitly constructed from `std::initializer_list` indirectly [feature-request]

Abierto
#153 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
Medio día
Aptitud para principiantes
35/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
cpp
Área
tooling

Línea de trabajo

No se nombra ningún archivo fuente ni ninguna prueba. Empieza por localizar las sobrecargas del constructor de boost::span y la cobertura de pruebas existente de span, y después comprueba el ejemplo de direct-list-initialization del issue. Se considera terminado cuando el ejemplo compila y una cobertura equivalente confirma el comportamiento previsto de initializer-list sin regresiones en la construcción existente a partir de rangos.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

NOTE: This isn't something std::span in C++20 supports either, unfortunately. But since Boost tries to offer things a future standard might adopt, I think this fits?

Because boost::span has no constructor signature with a direct std::initializer_list argument, but only a templated "range" one, this works:

std::initializer_list<int> il{1,2,3,4};
boost::span<int> sp(il);

but this does not, because it requires two implicit conversions to occur:

boost::span<int> sp({1,2,3,4});

I believe the above would work if this were to be added:

    constexpr span(std::initializer_list<T> il) noexcept
        : s_(boost::data(il), il.size())
    {}

I can provide a PR, if you wish.

I recognize this can lead to lifetime issues for the backing array, but that's already true for span regardless.

There is a std proposal for this, I believe: p2447r2, but I don't know its disposition.

Lenguaje dominante
C++
Estrellas
156
Forks
116
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de boostorg/core

Todos los issues de boostorg/core

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.