<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/104400>104400</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
cppcoreguidelines-prefer-member-initializer suggests fix which doesn't compile [clang-tidy][suggestion does not compile]
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang-tidy
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
rimathia
</td>
</tr>
</table>
<pre>
Minimal example:
`struct Base
{
int i;
};
template <typename T>
struct TemplateDerived : public Base
{
TemplateDerived()
{
i = 17;
}
};
int main()
{
}
`
invoking clang-tidy with `--checks=cppcoreguidelines-prefer-member-initializer`
output:
`[<source>:11:9: warning: 'i' should be initialized in a member initializer of the constructor [cppcoreguidelines-prefer-member-initializer]]
9 | TemplateDerived()
| : i(17)
10 | {
11 | i = 17;
| ^~~~~~~
1 warning generated.`
The check works correctly when the class initializing a base member is not a template.
I'm not sure whether this should be considered a request for an improvement or a bug.
[godbolt](https://gcc.godbolt.org/#g:!((g:!((g:!((h:codeEditor,i:(filename:'1',fontScale:14,fontUsePx:'0',j:1,lang:c%2B%2B,selection:(endColumn:1,endLineNumber:19,positionColumn:1,positionLineNumber:19,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:'struct+Base%0A%7B%0A++++int+i%3B%0A%7D%3B%0A%0Atemplate+%3Ctypename+T%3E%0Astruct+TemplateDerived+:+public+Base%0A%7B%0A++++TemplateDerived()+%0A++++%7B%0A++++++++i+%3D+17%3B%0A++++%7D%0A%7D%3B%0A%0Aint+main()%0A%7B%0A%7D%0A%0A'),l:'5',n:'1',o:'C%2B%2B+source+%231',t:'0')),k:29.549393414211444,l:'4',n:'0',o:'',s:0,t:'0'),(g:!((h:compiler,i:(compiler:g142,filters:(b:'0',binary:'1',binaryObject:'1',commentOnly:'1',debugCalls:'1',demangle:'0',directives:'0',execute:'0',intel:'1',libraryCode:'0',trim:'1',verboseDemangling:'0'),flagsViewOpen:'1',fontScale:14,fontUsePx:'0',j:1,lang:c%2B%2B,libs:!(),options:'-std%3Dc%2B%2B20+-O3',overrides:!(),selection:(endColumn:1,endLineNumber:1,positionColumn:1,positionLineNumber:1,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:1),l:'5',n:'0',o:'+x86-64+gcc+14.2+(Editor+%231)',t:'0')),header:(),k:20.450606585788567,l:'4',m:100,n:'0',o:'',s:0,t:'0'),(g:!((h:output,i:(compilerName:'.NET+7.0.105',editorid:1,fontScale:14,fontUsePx:'0',j:1,wrap:'1'),l:'5',n:'0',o:'Output+of+x86-64+gcc+14.2+(Compiler+%231)',t:'0')),k:24.999999999999996,l:'4',n:'0',o:'',s:0,t:'0'),(g:!((h:tool,i:(args:'--checks%3Dcppcoreguidelines-prefer-member-initializer',argsPanelShown:'0',compilerName:'x86-64+gcc+14.2',editorid:1,fontScale:14,fontUsePx:'0',j:1,monacoEditorHasBeenAutoOpened:'1',monacoEditorOpen:'1',monacoStdin:'1',stdin:'',stdinPanelShown:'1',toolId:clangtidytrunk,treeid:0,wrap:'1'),l:'5',n:'0',o:'clang-tidy+(trunk)+x86-64+gcc+14.2+(Editor+%231,+Compiler+%231)',t:'0')),k:25,l:'4',n:'0',o:'',s:0,t:'0')),l:'2',n:'0',o:'',t:'0')),version:4)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8WN1u67gRfhr6hrBBUX_WhS8sOUEXaE8WOGnvKWkscUORKkk5SS_67AUp2ZYc5-xme1rDcKTh_HG--UZimDG8kQA7FOcoPqzYYFuld5p3zLacrUpVv-_-xiXvmMDwxrpeAAr3iBwQ2aOEGKuHyuKcGZhkaT5eYIwxlxZzFObnpcP12v9a6HrBLGAUFva9B8k6wM8ofBiXJ-fPk9YBND9BjVG4x_1QCl59FvfGAtEtohme1heaPkuMwgMO0ktyTuiS_SRrt6uOcTm6vQl_tTuX6Gx0Ui9cNrgSTDZry-t3_Mpti1FC1uuqherFoPBQ9X2lNDQDr0FwCWbdaziCXnfQlaDXXHLLmeD_An1xrQbbD3aOigMzLIwadAWumuE-CFC4z1zlXpmWXDbuEtGUI5pi06pB1LgEfHVfYy4xw2PYmVxjdcS2BVwpOeKjNEZx_pXE44P7XkqdYZQWP8YMj5AU-P7HbYYjug3SCyAY44B4kzneQbDwchf5ZSAUP_zbf0aF4Fw_3IAEzSzUmwsQz64sDkn8qvSLwZXSGior3vFrC3KsmmDGXMvpHDFcMgOXShsslcUMn7mxmbfTL4imnVcwgwbn1ragsW25maHooOE1aKgxwxr-OYCx-Kg0ZhLzrtfqBB1Ii50El0OzCIHivFF1qYR1INFta21vXHPRR0Qfm6raTMsbpRsvDBu_HHjItp_ftCjcV6qGh5pbpREtuF_dHrnwzPd3aYBoimhxVNJ-r5ifNkE0Cf5u4Ne3UY2Mar-5ZUQLRyrnHtGY5tNPYUBAZbmSYxyQdaHE0MnJBmT9Vy7h2-AK72QZokWvDHcmC82z8KP6JcR3y7RdGC2XlqZu-aPBPT0fZCKy2_fIOURzP_poTPaIxmk-XeWXL5dOiSMah_lF7bC4vc5fbxJfZzCi-bMTPHitS8gPFM19Tvk4jH8_p7sUH2MvFe-bL7Y3pXxANHesv25r6eXw6d7HAs3m-G3eM2P3k45YiBGGeGw_uehZNd4V8ybMJ_BGQThp2nkTZ6PnFxTuabaJoyzMwiiIaBBEUXQNGS1CkkXI8cbRlNzxXtxnYtdzATMeXiThvgki6jjHhQU9sn9bLgKXXDL9vtj-KHoqf4PKLhYq1bl58yTF0qCGcmgKJoS5EXdMNgIW8WruRik_gVmI4Q2qwS5VubQgFh4FLzXT74Wql5pW826heAJdKgOHMYPxMbmo5FGwxvyDw-tTD_KnDyzBSzPDyQVUvRsh06bXxta-62dmlCCar5_CqR9OoDWv4dbNV0fh1ybh_30QBj8g4y0z8rdtsk4iRPOmckMqiDbU03F7fhBdqJl9zs4WWO1TuZTU85VsopgkJIm3cbrdxkn6ga-uwQJCfiJzp_e9D7z9dnmGbr49PCOapxuyCchUHfCb5fVU4y-266tm_bzd_2D1n6ZUc3X8ERDFZRb9ESh84aNNtvgk_7NBaZUS12Iz3ZzJeH5r94T8wuuvT8H5-ZVJEN9b9bpM9SOedwv334PaKckqNbLgL8zkAHI_WOVGG9SL4TbX_DD5xsXvtuZLublKZoLbTZ-fiEqJX1xQfz5yxyOrB_nihzSA3yH58314PXSNDTf5zr40HQpE8z_RqfHP6MzZPunvOrlnfAJtxvEfIZqt6l1YZ2HGVrALUhqmhGRJsmp3NSmjJA2ibZKy7ZGUdRqzqoY0qY4JLbNyxXeU0Ihsg5jEUUaTTRCQLSlZfCRRWVY0QRGBjnGxEeLUuTPCihszwC4gUUTISrAShPH_bqB0DgtF8WGld85qXQ6NQRER3Fhz9WO5FbD7AtOwGZoGjDX4yN_wa8urFtcKjEQ0tXiimT-8XvNwZ9N8suNKen1_4JrUXZaDFrubYxG37VBuKtUh-ugSnv6se6386xB99FUwiD5OhTjt6H8CAAD__8OV40I">