<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/95955>95955</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang Tidy] `bugprone-macro-parentheses` should not trigger for function prototypes (which C++ does not allow to nest parenthesis)
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ETERNALBLUEbullrun
</td>
</tr>
</table>
<pre>
```
27 | typedef class Cns {
| ^
28 | public:
|
/data/data/com.termux/files/home/SubStack/cxx/ClassCns.hxx:44:9: warning: function-like macro 'templateWorkaround' used; consider a 'constexpr' template function [cppcoreguidelines-macro-usage]
44 | #define templateWorkaround(INPUT_MODE, INPUT_TYPEDEF) \
| ^
/data/data/com.termux/files/home/SubStack/cxx/ClassCns.hxx:58:35: warning: macro argument should be enclosed in parentheses [bugprone-macro-parentheses]
58 | virtual const bool processToBool(INPUT_TYPEDEF &input) const {assert((INPUT_MODE) == inputMode && cnsModeBool == outputMode); return 0;}\
| ^
| ( )
/data/data/com.termux/files/home/SubStack/cxx/ClassCns.hxx:59:35: warning: macro argument should be enclosed in parentheses [bugprone-macro-parentheses]
59 | virtual const char processToChar(INPUT_TYPEDEF &input) const {assert((INPUT_MODE) == inputMode && cnsModeChar == outputMode); return 0;}\
| ^
| ( )
/data/data/com.termux/files/home/SubStack/cxx/ClassCns.hxx:60:33: warning: macro argument should be enclosed in parentheses [bugprone-macro-parentheses]
60 | virtual const int processToInt(INPUT_TYPEDEF &input) const {assert((INPUT_MODE) == inputMode && cnsModeInt == outputMode); return 0;}\
| ^
| ( )
/data/data/com.termux/files/home/SubStack/cxx/ClassCns.hxx:61:43: warning: macro argument should be enclosed in parentheses [bugprone-macro-parentheses]
61 | virtual const unsigned int processToUint(INPUT_TYPEDEF &input) const {assert((INPUT_MODE) == inputMode && cnsModeUint == outputMode); return 0;}\
| ^
| ( )
/data/data/com.termux/files/home/SubStack/cxx/ClassCns.hxx:62:37: warning: macro argument should be enclosed in parentheses [bugprone-macro-parentheses]
62 | virtual const float processToFloat(INPUT_TYPEDEF &input) const {assert((INPUT_MODE) == inputMode && cnsModeFloat == outputMode); return 0;}\
| ^
| ( )
/data/data/com.termux/files/home/SubStack/cxx/ClassCns.hxx:63:39: warning: macro argument should be enclosed in parentheses [bugprone-macro-parentheses]
63 | virtual const double processToDouble(INPUT_TYPEDEF &input) const {assert((INPUT_MODE) == inputMode && cnsModeDouble == outputMode); return 9;}\
| ^
| ( )
/data/data/com.termux/files/home/SubStack/cxx/ClassCns.hxx:64:54: warning: macro argument should be enclosed in parentheses [bugprone-macro-parentheses]
64 | virtual const std::vector<bool> processToVectorBool(INPUT_TYPEDEF &input) const {assert((INPUT_MODE) == inputMode && cnsModeVectorBool == outputMode); return {};}\
| ^
| ( )
/data/data/com.termux/files/home/SubStack/cxx/ClassCns.hxx:65:54: warning: macro argument should be enclosed in parentheses [bugprone-macro-parentheses]
65 | virtual const std::vector<char> processToVectorChar(INPUT_TYPEDEF &input) const {assert((INPUT_MODE) == inputMode && cnsModeVectorChar == outputMode); return {};}\
| ^
| ( )
/data/data/com.termux/files/home/SubStack/cxx/ClassCns.hxx:66:52: warning: macro argument should be enclosed in parentheses [bugprone-macro-parentheses]
66 | virtual const std::vector<int> processToVectorInt(INPUT_TYPEDEF &input) const {assert((INPUT_MODE) == inputMode && cnsModeVectorInt == outputMode); return {};}\
| ^
| ( )
/data/data/com.termux/files/home/SubStack/cxx/ClassCns.hxx:67:62: warning: macro argument should be enclosed in parentheses [bugprone-macro-parentheses]
67 | virtual const std::vector<unsigned int> processToVectorUint(INPUT_TYPEDEF &input) const {assert((INPUT_MODE) == inputMode && cnsModeVectorUint == outputMode); return {};}\
| ^
| ( )
/data/data/com.termux/files/home/SubStack/cxx/ClassCns.hxx:68:50: warning: macro argument should be enclosed in parentheses [bugprone-macro-parentheses]
68 | virtual std::vector<float> processToVectorFloat(INPUT_TYPEDEF &input) const {assert((INPUT_MODE) == inputMode && cnsModeVectorFloat == outputMode); return {};}\
| ^
| ( )
/data/data/com.termux/files/home/SubStack/cxx/ClassCns.hxx:69:58: warning: macro argument should be enclosed in parentheses [bugprone-macro-parentheses]
69 | virtual const std::vector<double> processToVectorDouble(INPUT_TYPEDEF &input) const {assert((INPUT_MODE) == inputMode && cnsModeVectorDouble == outputMode); return {};}\
| ^
| ( )
/data/data/com.termux/files/home/SubStack/cxx/ClassCns.hxx:70:44: warning: macro argument should be enclosed in parentheses [![Uploading Termux.png…]()]
70 | virtual const std::string processToString(INPUT_TYPEDEF &input) const {auto val = processToVectorChar(input); return std::string(&val[0], val.size());}
| ^
| ( )
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzs3N1u2zYUAOCnOb4hYkjU_4Uv5D-gQNsVa7JhVwMl0RJXmhRIKk329APlOHYTry1ay3ZSAsFxBJM60qH0RTEtEa1ZLSidQDSFaD4inWmkmiyuF7-_z99O394sio5z1YlRIav7CcTew483By-HGYbc20SEEwTJDJn7llZ0hUpOtEYzoREk0-fNn0fb--stfiwiiBaHNjftN7ftCs5KCPLv3sRNO7ysiCG7l1Kux4aqdXcHeLlinGrAy0auKeDlx674aEj5yTa7s-_PbG1mQo-buzsI8jCEIM8gyNFnogQTtf111YnSMCmuOPtE0ZqUSiLAiaHrlhND_5TqE1GyExXgBHWaVhBMUSmFZhVViNi2dsnQu1bZJtuOjytGEE3Lti2lonXHKsqZoPqqT3TVaVJTiOYH6haGfd0ABxVdMUHRoS1K37z_cHP997vf5gvAM7RZuv7rw2K-WALOEESzoQ6JveE-5hhFKQR5ED0ZpM2wEFV3ayoM0o3seIUKiqgoudS0QkygligqTEM11bbmRVe3Sgr6UOq9dw8XPEp_qAy3TJmO8P6QMKiQkqNWyZJqfS2nUvLHQXoYFgQ4ZqLtjB2fTSdIpkRrqgzg9MmYZgiCOQRz1Hd5Jytq-wOOUSm0XbQptm1kZx4aAc7sYaqo6ZRAHgRTSOYDHgyvIx4WzFVof89xepS1ZEPQkZ2NjuwIdJQNUTs6Zg1RA9NhUzg6HB2Ojjz2LB3BGeiIf-zi60s6mDA7Od4IMzAcb4RxbjgrfiUffPvv41l88I_gQyf6Tx-qL6G4YYNLYVM4KhwzryNeNlHYXsIk5yAKH4GoFZdkz6alXRwYpz6H08nJc-5qXbIq9ponePqZ-UlUCY6gSiW7gtMdK_N-eWBXNkm-BUvmYHHIOHCegRNCkEfhOcAJjwCONhUEOQT5LS2NVBDMCik5BIudQX_075xgamiX6FsWQdJT5EC6zOiou7x42YhGZ0M0GgTRsiHqAKInmCTbJXKIvujoEL28eNmIxhZRfA5E40EQZcIcMHT46cLHPE7QFxedmpcRL1vKZDv_cHIpk0Gk3J8vPUDmCSZOd4kcmr9UdOC-_HjZWKf2stY7B9Y_9wX750z3c8YHfD7F5PFeJif0i4hO1nPW_pJFzLb3HZ1cxGPcN_Dcxc2s9wEYTzL9vZ_K0fgqo6P05cSLpjfxtrfl_iy9gH2Ipjctl6RiokbX_RaNW1HDAkPqQR5bgy1n2WGMk2PcifGIsTbKbsYjwB_75e-ktzMS3ZJ-2v5_pry2nfYsfZK639X4lnCIpl6_6zO7zrFm_9KHMuDtd5DcqTzAaeeIHKauR-Zs-6SFUTUJqizIyIhO_MRPE5wlvj9qJjiJ_CTNEhrHie9VWZV5NKi8KvKj0C9pMWIT7OHQi_3Uj6PI98erIqNpmPqrDIdhGhEIPbomjI85v12PpapHTOuOTrIoi6IRJwXlun8wBMYlJ_bUxRDNR2pi218VXa0h9DjTRu_WYJjh_dMkZrYHumbVPURzBLH3lYvQ2NtiKqRBRrG6pgqtpNo9rKBV0khz31pVcfq5YWWDZoCngKeoklT3PQnn8jMyEgmqzU5ipgFno07xSWNMq61GeAl4WTPTdMW4lGvAS7sHDy9XrZL_0NIAXvYFsX84NjW5neD_AgAA__82Ainz">