<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">How about this one? Is the inner init list really creating a Point which is then <i>copied</i> by the CompoundLiteralExpr?<div><br></div><div><div>struct Point {</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>int x, y;</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>~Point();</div><div>};</div><div><br></div><div>void test() {</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>((Point){1,2});</div><div>}</div></div><div><br></div><div><div>`-FunctionDecl 0x7f9558860720 <line:6:1, line:8:1> test 'void (void)'</div><div>  `-CompoundStmt 0x7f9558860990 <line:6:13, line:8:1></div><div>    `-ExprWithCleanups 0x7f9558860978 <line:7:2, col:15> 'struct Point'</div><div>      `-ParenExpr 0x7f9558860958 <col:2, col:15> 'struct Point'</div><div><b>        `-CXXBindTemporaryExpr 0x7f9558860938 <col:3, col:14> 'struct Point' (CXXTemporary 0x7f9558860930)</b></div><div>          `-CompoundLiteralExpr 0x7f9558860908 <col:3, col:14> 'struct Point'</div><div><b>            `-CXXBindTemporaryExpr 0x7f95588608e8 <col:10, col:14> 'struct Point' (CXXTemporary 0x7f95588608e0)</b></div><div>              `-InitListExpr 0x7f9558860860 <col:10, col:14> 'struct Point'</div><div>                |-IntegerLiteral 0x7f95588607d0 <col:11> 'int' 1</div><div>                `-IntegerLiteral 0x7f95588607f0 <col:13> 'int' 2</div></div><div><br></div><div>(This is the same AST whether in C++03 or C++11.)</div><div><br></div><div>For comparison:</div><div><br></div><div><div>struct Point {</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>Point(int x, int y);</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>~Point();</div><div>};</div><div><br></div><div>void test() {</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>((Point){1,2});</div><div>}</div></div><div><br></div><div><div>`-FunctionDecl 0x7ffb3c060460 <line:6:1, line:8:1> test 'void (void)'</div><div>  `-CompoundStmt 0x7ffb3c0608b0 <line:6:13, line:8:1></div><div>    `-ExprWithCleanups 0x7ffb3c060898 <line:7:2, col:15> 'struct Point'</div><div>      `-ParenExpr 0x7ffb3c060878 <col:2, col:15> 'struct Point'</div><div><b>        `-CXXBindTemporaryExpr 0x7ffb3c060858 <col:3, <invalid sloc>> 'struct Point' (CXXTemporary 0x7ffb3c060850)</b></div><div>          `-CompoundLiteralExpr 0x7ffb3c060828 <col:3, <invalid sloc>> 'struct Point'</div><div><b>            `-CXXBindTemporaryExpr 0x7ffb3c060808 <col:3, <invalid sloc>> 'struct Point' (CXXTemporary 0x7ffb3c060800)</b></div><div>              `-CXXTemporaryObjectExpr 0x7ffb3c060780 <col:3, <invalid sloc>> 'struct Point' 'void (int, int)'</div><div>                |-IntegerLiteral 0x7ffb3c060510 <col:11> 'int' 1</div><div>                `-IntegerLiteral 0x7ffb3c060530 <col:13> 'int' 2</div></div><div><br></div><div><br></div><div>Jordan</div></body></html>