switch statement case label has only `int` template argument
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
Línea de trabajo
Comienza localizando los puntos de entrada switch_statement y case_statement mencionados en el informe y, a continuación, reproduce el ejemplo con el comportamiento del compilador indicado. Sigue cómo se tipan el valor de case y el argumento de la lambda; el trabajo estará terminado cuando un valor integral de case como 2147483648 se represente y se compare correctamente en lugar de producir “other”, con cobertura de regresión para este comportamiento.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Before gcc9, if a template argument is an integral value, no compiler error/warning generated when the specified value is bigger than the integral value MAX.
This leads the following runtime issue:
#include <iostream>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/switch.hpp>
int main() {
using namespace boost;
using namespace boost::lambda;
switch_statement(
_1,
case_statement<2147483648>(std::cout << constant("big")),
default_statement(std::cout << constant("other"))
)(2147483648); // prints 'other'
// static_cast<int>(2147483648) is OK
}
This issue prone working can be eliminated in any following way:
- replace case_statement template argument from
inttouintmax_torintmax_tor any bigger than int. This solves that not onlyintparameters can be accepted in later gcc's and clang too. - switch_statement lambda accepts/casts argument
int. This solves type safety. - some other template magic, where at case statement can be set the acceptable integral type, and switch statement recognizes, and uses
common_typeto casts lambda parameter to that.
- Lenguaje dominante
- C++
- Estrellas
- 20
- Forks
- 42
- 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/lambda
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 15/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
Todos los issues de boostorg/lambda
Issues similares
-
enhancement
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
QuantStack/git2cpp#187 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
mlcommons/mobile_app_open#1182 ·
-
Needs-Triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
microsoft/winget-cli#6547 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
AXERA-TECH/ax-llm#77 ·