boostorg / boostorg/preprocessor
BOOST_PP_REMOVE_PARENS() is dangerously broken -- it strips initial group of parentheses instead of surrounding
- Dominant language
- C++
- Stars
- 118
- Forks
- 76
- PR merge metrics
- No merged PRs in 30d
Description
https://godbolt.org/z/38jbTP7qn
```
#include
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_PARENS` macro removes the beginning parenthesis, if it exists, from the input data and expands to the result
"Parenthes**i**s" is singular (plural is parenthes**es**), 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.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.