BOOST_PP_REMOVE_PARENS() is dangerously broken -- it strips initial group of parentheses instead of surrounding
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 38/100
Piste de recherche
Commencez par le reproducteur Godbolt et boost/preprocessor/punctuation/remove_parens.hpp afin de vérifier comment BOOST_PP_REMOVE_PARENS traite l’entrée. Examinez le contrat documenté et déterminez le changement d’API prévu, notamment ses implications en matière de compatibilité et de nommage. Le travail est terminé lorsque le comportement et la documentation sont conformes à un contrat explicitement décidé et que le reproducteur n’expose plus le piège signalé.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
https://godbolt.org/z/38jbTP7qn
#include <boost/preprocessor/punctuation/remove_parens.hpp>
int main(int argc, char *argv[]) {
#if MACRO
return BOOST_PP_REMOVE_PARENS((*argv)[1]); // Crash
#else
return (*argv)[1] ; // OK
#endif
}
Note the documentation piles extra confusion on top of this. It says:
The
BOOST_PP_REMOVE_PARENSmacro removes the beginning parenthesis, if it exists, from the input data and expands to the result
"Parenthesis" is singular (plural is parentheses), so the documentation is claiming that only a beginning ( is being removed. It makes no mention of removing any closing ), regardless of its expected location, even though the function apparently does that regardless of its location.
This is a massive pitfall. The name BOOST_PP_REMOVE_PARENS itself (and the intended usage) are misleading for most users and very unlikely to be what they actually want.
I would suggest, at the very least, renaming the macro to something like BOOST_PP_REMOVE_BEGINNING_PARENS and updating the documentation to clarify it is not doing what users would expect from a REMOVE_PARENS macro.
- Langage dominant
- C++
- Étoiles
- 118
- Forks
- 76
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de boostorg/preprocessor
-
Difficulté 3/5 1-2 jours Accessibilité débutants 42/100
boostorg/preprocessor#63 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 58/100
boostorg/preprocessor#58 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 55/100
boostorg/preprocessor#55 ·
-
Documentation format Ouverte
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
boostorg/preprocessor#52 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 35/100
boostorg/preprocessor#50 · 1 commentaire ·
Toutes les issues de boostorg/preprocessor
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
-
good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
ros2/message_filters#338 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
subsurface/subsurface#4984 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
flutter-webrtc/flutter-webrtc#2206 ·
-
litertlm-android AAR ships no consumer ProGuard rules → "mid == null" SIGABRT in minified apps Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
google-ai-edge/LiteRT-LM#3739 ·