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

interval converting constructors and assignment are unconstrained: every type claims to convert

Cerrado
#56 0 comentarios 0 reacciones 0 asignados Ver en GitHub

@reach2sayan ya está trabajando en esto.

Desde el 14/10/2026.

  • #57 de @reach2sayan — abierto

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
25/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
cpp
Área
api

Línea de trabajo

The unconstrained converting constructors and operator= are declared in interval.hpp, so start there and check which overloads accept any T1. Constrain them so only intended arithmetic types convert, then compile the static_asserts from the issue to confirm std::is_convertible is false for std::string, unrelated and void*. Pull request #57 already targets this, so read it and coordinate with its author before starting.

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

Descripción

Follow-up to #47, as requested there.

interval<T, Policies> declares (interval.hpp, develop at 3957843):

  template<class T1> interval(T1 const &v);
  template<class T1, class T2> interval(T1 const &l, T2 const &u);
  template<class T1> interval &operator=(T1 const &v);

None of them is constrained, and the constructors are not explicit. So an interval claims to be implicitly convertible from any type. This compiles:

  #include <boost/numeric/interval.hpp>
  #include <string>
  #include <type_traits>

  typedef boost::numeric::interval<double> I;
  struct unrelated {};

  static_assert(std::is_convertible<std::string, I>::value, "");
  static_assert(std::is_convertible<unrelated, I>::value, "");
  static_assert(std::is_convertible<void*, I>::value, "");
  static_assert(std::is_constructible<I, std::string, unrelated>::value, "");
  static_assert(std::is_assignable<I&, std::string>::value, "");

  int main() {}

Effects

  1. Overload sets that include an interval become ambiguous.
  2. Generic libraries that select overloads with is_convertible are misled. With Eigen 3.4.0 and Eigen::NumTraits<I> specialised, A * B for two Eigen::Matrix<I, 2, 2> is ambiguous, because the scalar-times-matrix overloads see the matrix as convertible to the scalar type. A.lazyProduct(B) works. This is the case from #47.
  3. Bad arguments are reported from inside interval.hpp instead of at the call site.

godbolt

Lenguaje dominante
C++
Estrellas
31
Forks
49
Merge medio
1 d 13 h
PR fusionados (30 d)
6

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/interval

Todos los issues de boostorg/interval

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.