File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -3464,6 +3464,11 @@ bool Converter::VisitInitListExpr(clang::InitListExpr *expr) {
34643464 if (auto form = expr->getSemanticForm ())
34653465 expr = form;
34663466
3467+ if (expr->isTransparent ()) {
3468+ Convert (expr->getInit (0 ));
3469+ return false ;
3470+ }
3471+
34673472 auto qual_type = expr->getType ();
34683473 if (qual_type->isScalarType ()) {
34693474 assert (expr->getNumInits () < 2 && " Excess elements in scalar initializer" );
Original file line number Diff line number Diff line change @@ -1840,6 +1840,11 @@ bool ConverterRefCount::VisitInitListExpr(clang::InitListExpr *expr) {
18401840 if (auto form = expr->getSemanticForm ())
18411841 expr = form;
18421842
1843+ if (expr->isTransparent ()) {
1844+ Convert (expr->getInit (0 ));
1845+ return false ;
1846+ }
1847+
18431848 auto qual_type = expr->getType ();
18441849 if (qual_type->isScalarType ()) {
18451850 PushConversionKind push (*this , ConversionKind::Unboxed);
Original file line number Diff line number Diff line change 11#include < array>
2+ #include < cassert>
23#include < initializer_list>
34#include < vector>
45
56void f (std::initializer_list<int > list) {}
67
8+ struct Pair {
9+ int a;
10+ int b;
11+ };
12+
13+ struct Holder {
14+ Pair p{0 , 0 };
15+ Holder &operator =(Pair &&o) {
16+ p = o;
17+ return *this ;
18+ }
19+ };
20+
21+ int sum (const Pair &p) { return p.a + p.b ; }
22+
723int main () {
824 int i1{3 };
925 int i2{};
@@ -13,5 +29,11 @@ int main() {
1329 std::vector<int > vec = {1 , 2 , 3 };
1430 f ({1 , 2 , 3 , 4 });
1531
32+ Pair p{1 , 2 };
33+ Holder h;
34+ h = {std::move (p)};
35+ assert (h.p .a == 1 && h.p .b == 2 );
36+ assert (sum ({p}) == 3 );
37+
1638 return 0 ;
1739}
You can’t perform that action at this time.
0 commit comments