<div dir="ltr">Hi,<div><br></div><div>I recently found out that for the following sample:</div><div><br></div><div>
<pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)">class Pair {</span></pre>
<pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)">  int a,b;</span></pre>
<pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)">public:</span></pre>
<pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)">  Pair(int f,int s){</span></pre>
<pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)">    a=f;</span></pre>
<pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)">    b=s;</span></pre>
<pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)">  }  </span></pre>
<pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)">};</span></pre>
<pre style="margin-top:0px;margin-bottom:0px"><br></pre>
<pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)">template <class T> class A : public Pair {</span></pre>
<pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)">  A(int f, int s) : Pair(f,s){}</span></pre>
<pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)">};</span></pre><pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)"><br></span></pre><pre style="margin-top:0px;margin-bottom:0px">
<span style="color:rgb(0,0,0)">Clang produces a ParenListExpr as init expression for the Pair(f,s) call.</span></pre><pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)"><br></span></pre><pre style="margin-top:0px;margin-bottom:0px">
<span style="color:rgb(0,0,0)">However if the class A has no template parameter i.e. just class A: public Pair{</span></pre><pre style="margin-top:0px;margin-bottom:0px"><font color="#000000">Clang produces a CXXConstructExpr </font><span style="color:rgb(0,0,0);font-family:arial">as init expression </span><span style="color:rgb(0,0,0);font-family:arial">.</span></pre>
<pre style="margin-top:0px;margin-bottom:0px"><font color="#000000"><br></font></pre><pre style="margin-top:0px;margin-bottom:0px"><font color="#000000">Why does it matter if there is a template argument for the CXXCtorInitializer ?</font></pre>
<pre style="margin-top:0px;margin-bottom:0px"><font color="#000000"><br></font></pre><pre style="margin-top:0px;margin-bottom:0px"><font color="#000000">Thanks for your answers.</font></pre><pre style="margin-top:0px;margin-bottom:0px">
<font color="#000000">Cheers,</font></pre><pre style="margin-top:0px;margin-bottom:0px"><font color="#000000">Lukas</font></pre><pre style="margin-top:0px;margin-bottom:0px"><font color="#000000"><br></font></pre><pre style="margin-top:0px;margin-bottom:0px">
<font color="#000000">PS: complete dumps of both samples:</font></pre><pre style="margin-top:0px;margin-bottom:0px">non-templated:</pre><pre style="margin-top:0px;margin-bottom:0px"><pre style="margin-top:0px;margin-bottom:0px">
<span style="color:rgb(0,0,0)">    |-</span><span style="text-decoration:underline;color:rgb(0,0,0)">CXXCtorInitializer</span><span style="color:rgb(0,0,0)"> 'class Pair'</span></pre>
<pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)">    | |-</span><span style="text-decoration:underline;color:rgb(0,0,0)">CXXConstructExpr</span><span style="color:rgb(0,0,0)"> </span><span style="text-decoration:underline;color:rgb(0,0,0)">0x1aeb940</span><span style="color:rgb(0,0,0)"> <col:21, col:29> 'class Pair' 'void (int, int)'</span></pre>

<pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)">    | | |-</span><span style="text-decoration:underline;color:rgb(0,0,0)">ImplicitCastExpr</span><span style="color:rgb(0,0,0)"> </span><span style="text-decoration:underline;color:rgb(0,0,0)">0x1aeb910</span><span style="color:rgb(0,0,0)"> <col:26> 'int' <</span><span style="text-decoration:underline;color:rgb(0,0,0)">LValueToRValue</span><span style="color:rgb(0,0,0)">></span></pre>

<pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)">    | | | `-</span><span style="text-decoration:underline;color:rgb(0,0,0)">DeclRefExpr</span><span style="color:rgb(0,0,0)"> </span><span style="text-decoration:underline;color:rgb(0,0,0)">0x1aeb4d8</span><span style="color:rgb(0,0,0)"> <col:26> 'int' </span><span style="text-decoration:underline;color:rgb(0,0,0)">lvalue</span><span style="color:rgb(0,0,0)"> </span><span style="text-decoration:underline;color:rgb(0,0,0)">ParmVar</span><span style="color:rgb(0,0,0)"> </span><span style="text-decoration:underline;color:rgb(0,0,0)">0x1aeb2c0</span><span style="color:rgb(0,0,0)"> 'f' 'int'</span></pre>

<pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)">    | | `-</span><span style="text-decoration:underline;color:rgb(0,0,0)">ImplicitCastExpr</span><span style="color:rgb(0,0,0)"> </span><span style="text-decoration:underline;color:rgb(0,0,0)">0x1aeb928</span><span style="color:rgb(0,0,0)"> <col:28> 'int' <</span><span style="text-decoration:underline;color:rgb(0,0,0)">LValueToRValue</span><span style="color:rgb(0,0,0)">></span></pre>

<pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)">    | |   `-</span><span style="text-decoration:underline;color:rgb(0,0,0)">DeclRefExpr</span><span style="color:rgb(0,0,0)"> </span><span style="text-decoration:underline;color:rgb(0,0,0)">0x1aeb500</span><span style="color:rgb(0,0,0)"> <col:28> 'int' </span><span style="text-decoration:underline;color:rgb(0,0,0)">lvalue</span><span style="color:rgb(0,0,0)"> </span><span style="text-decoration:underline;color:rgb(0,0,0)">ParmVar</span><span style="color:rgb(0,0,0)"> </span><span style="text-decoration:underline;color:rgb(0,0,0)">0x1aeb330</span><span style="color:rgb(0,0,0)"> 's' 'int'</span></pre>
<pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)"><br></span></pre><pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)"><br></span></pre><pre style="margin-top:0px;margin-bottom:0px">
<span style="color:rgb(0,0,0)">templated: </span></pre><pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)"><br></span></pre><pre style="margin-top:0px;margin-bottom:0px">
<pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)">      |-</span><span style="text-decoration:underline;color:rgb(0,0,0)">CXXCtorInitializer</span><span style="color:rgb(0,0,0)"> 'class Pair'</span></pre>

<pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)">      | |-</span><span style="text-decoration:underline;color:rgb(0,0,0)">ParenListExpr</span><span style="color:rgb(0,0,0)"> </span><span style="text-decoration:underline;color:rgb(0,0,0)">0x2bff7e8</span><span style="color:rgb(0,0,0)"> <col:25, col:29> 'NULL TYPE'</span></pre>

<pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)">      | | |-</span><span style="text-decoration:underline;color:rgb(0,0,0)">DeclRefExpr</span><span style="color:rgb(0,0,0)"> </span><span style="text-decoration:underline;color:rgb(0,0,0)">0x2bff798</span><span style="color:rgb(0,0,0)"> <col:26> 'int' </span><span style="text-decoration:underline;color:rgb(0,0,0)">lvalue</span><span style="color:rgb(0,0,0)"> </span><span style="text-decoration:underline;color:rgb(0,0,0)">ParmVar</span><span style="color:rgb(0,0,0)"> </span><span style="text-decoration:underline;color:rgb(0,0,0)">0x2bff580</span><span style="color:rgb(0,0,0)"> 'f' 'int'</span></pre>

<pre style="margin-top:0px;margin-bottom:0px"><span style="color:rgb(0,0,0)">      | | `-</span><span style="text-decoration:underline;color:rgb(0,0,0)">DeclRefExpr</span><span style="color:rgb(0,0,0)"> </span><span style="text-decoration:underline;color:rgb(0,0,0)">0x2bff7c0</span><span style="color:rgb(0,0,0)"> <col:28> 'int' </span><span style="text-decoration:underline;color:rgb(0,0,0)">lvalue</span><span style="color:rgb(0,0,0)"> </span><span style="text-decoration:underline;color:rgb(0,0,0)">ParmVar</span><span style="color:rgb(0,0,0)"> </span><span style="text-decoration:underline;color:rgb(0,0,0)">0x2bff5f0</span><span style="color:rgb(0,0,0)"> 's' 'int'</span></pre>
</pre></pre></div></div>