Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

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

Chiusa
#56 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

@reach2sayan ci sta già lavorando.

Dal 14/10/2026.

  • #57 di @reach2sayan — aperta

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
25/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
cpp
Ambito
api

Direzione di ricerca

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.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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

Lingua principale
C++
Stelle
31
Fork
48
Merge medio
1g 13h
PR unite (30g)
6

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di boostorg/interval

Tutte le issue di boostorg/interval

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.