boostorg / boostorg/lambda

switch statement case label has only `int` template argument

Ouverte
#19 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
C++
Étoiles
20
Forks
42
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

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

#include
#include

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(2147483648) is OK
}
```

This issue prone working can be eliminated in any following way:
- replace case_statement template argument from `int` to `uintmax_t` or `intmax_t` or any bigger than int. This solves that not only `int` parameters 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_type` to casts lambda parameter to that.

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Piste de recherche

Commencez par localiser les points d’entrée switch_statement et case_statement mentionnés dans le rapport, puis reproduisez l’exemple avec le comportement du compilateur indiqué. Suivez la façon dont la valeur de case et l’argument de la lambda sont typés ; le travail est terminé lorsqu’une valeur intégrale de case telle que 2147483648 est représentée et comparée correctement au lieu de produire « other », avec une couverture de régression pour ce comportement.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
cpp
Domaine
backend
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.