boostorg / boostorg/preprocessor

BOOST_PP_REMOVE_PARENS() is dangerously broken -- it strips initial group of parentheses instead of surrounding

Open
#65 5 comments 0 reactions 0 assignees View on GitHub
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.