numeric_cast() does not detect enum truncation
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 35/100
Direzione di ricerca
Inizia compilando ed eseguendo il reproducer con boost/numeric/conversion/cast.hpp, quindi segui il percorso di conversione di numeric_cast() per i target enum. Il lavoro è completo quando la conversione fornita rifiuta il valore in overflow con un'eccezione e la copertura di regressione dimostra tale comportamento.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
This simple program demonstrates the problem. The conversion below succeeds but the converted value is truncated. I would expect an exception in this case.
#include <iostream>
#include <boost/numeric/conversion/cast.hpp>
int main()
{
enum E : unsigned int { e=1 };
const std::uint64_t value=0x1'8000'0000;
std::cout << std::hex << boost::numeric_cast<E>(value) << std::endl; // prints "80000000"
return 0;
}
The program writes 80000000 instead of 180000000 to the console, so bit 32 (when numbering them from 0) is lost.
The problem does not occur (i.e. an exception is thrown) if the value is directly cast to the underlying type "unsigned int" of the enum.
- Lingua principale
- C++
- Stelle
- 13
- Fork
- 42
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
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
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di boostorg/numeric_conversion
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
Tutte le issue di boostorg/numeric_conversion
Issue simili
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 72/100
mudler/parakeet.cpp#99 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
raspberrypi/rpi-imager#1773 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
duckdb/duckdb-wasm#2267 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 86/100
AcademySoftwareFoundation/Imath#611 ·
I maintainer di solito rispondono entro 1 giorno
-
question
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100