switch statement case label has only `int` template argument
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 35/100
Rechercherichtung
Beginne damit, die im Bericht genannten Einstiegspunkte switch_statement und case_statement zu lokalisieren, und reproduziere dann das Beispiel mit dem angegebenen Compilerverhalten. Verfolge, wie der case-Wert und das Lambda-Argument typisiert werden; abgeschlossen ist die Aufgabe, wenn ein integraler case-Wert wie 2147483648 korrekt dargestellt und abgeglichen wird, anstatt „other“ zu erzeugen, mit einer Regressionstestabdeckung für dieses Verhalten.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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.
- Vorherrschende Sprache
- C++
- Sterne
- 20
- Forks
- 42
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus boostorg/lambda
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 15/100
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 35/100
Alle Issues in boostorg/lambda
Ähnliche Issues
-
enhancement
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 88/100
QuantStack/git2cpp#187 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 86/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
mlcommons/mobile_app_open#1182 ·
-
Needs-Triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
microsoft/winget-cli#6547 ·
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 90/100
AXERA-TECH/ax-llm#77 ·