<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/92439>92439</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang] `++this` is accepted when it’s not instantiated
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang:frontend,
accepts-invalid
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Sirraide
</td>
</tr>
</table>
<pre>
This code compiles, unless we instantiate and call `f()`. This doesn’t seem right to me because, irrespective of what the type of e.g. `this` ends up being, it’s a prvalue, and we can’t increment that.
```c++
template <typename T>
struct S : T {
auto t() -> S*;
void f() {
++reinterpret_cast<S*>(4);
++this;
++t();
}
};
```
Imo we should diagnose this earlier if that is feasible. GCC also suffers from the same problem, which caused `++this` as a typo for `++*this` to go unnoticed in a libstdc++ header because the template containing it was never instantiated by libstdc++. MSVC also accepts this code. Is this a bug or a standards defect? Because I don’t see a situation where `++this` would be semantically valid.
CC @AaronBallman, @cor3ntin, @erichkeane
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx0VEFvszgQ_TXmMioiJiThwCFNmlUPe2q119VgD-BdYyN7SNR_vzKhbbqfvggFYXvem3lvxhij6R1RI6pnUZ0znHnwoXkzIaDRlLVefzTvg4mgvCZQfpyMpSjkCWZnKUa4ERgXGR0bZAJ0GhRaC2JXdEIehKzFrshhwdCeohMvUhwKUdcMkWiEYPqBgT2MBC0pnCMleBMCxYkUmyuB7-A2IAMPBPwxLQuU93li4cFEsSuAnI4wT9CScf2CwF9UERCmcEU7L9gpyRuBwsdkjFOBRnKJBTkXxVkUx_V_V9wfJeRzepZVpnGyqWZRnlJSDkeCd1G-3Lcjh1kxvIEoj_AOYr-GAQDgzB74Lg88ifIF3oQ8ivLhyNUbDauCKRi-t9Lvnkgg45jCFIj_VhhZlKc70IuQh23S_hHyO27R7Ddbq2nlI6PYn1cl9uevuC9VHqV6HX2SNg5-thq0wd75SJAIgTBYQwFMt0gMJkJHGE1rKYc_TidAGz3EuesoROiCHxfDY9J1Cr61NCb3boNRAyyNolMDPJS0KwCT1_wxeeh8-N4W8vh5gj30HmbnPBtFGowDBGvayHr1FwZCTeGzHe9t9-m28o7ROON6MAw3jODomqr6ngIN7cdPxBz-fPtrLRCVoonjXZM0Vjm8rl8I7dyDD4CQwDQGHUFTR4pFeYHnNZ9X0P5_c5QiDM_Ixju4DRToV2luiyctQaQxZZrm9AOuaI3-0e6nE4htccTg3TNaO6JLsottoXwoHZvPTwpGDf8SOoJMN6Wuyxozajb7TXU4VJuqyoaGKiypkwcsimpX151u99W2LVFXRS1xV2emkYXcFtVmtzlsq6rKqeiwLrebfVFKWbYyEY1obG7tdcx96DMT40xNLbdlnVlsycbl-pJSWXS9KI9d8I7JaSGlkCch5Sr5k3FLtWm9OmehSZBP7dxHsS2siRy_SdiwXa7F0wJanX_VMxm2AJNOkrufN47z_KMnsjnYZmCeoiiPQl6EvPSGh7nNlR-FvCTm9fU0Bf9P8lxellqjkJel3P8CAAD__7EqvCU">