rsmith added inline comments.

================
Comment at: lib/Sema/SemaExprCXX.cpp:3429-3430
           // initial standard conversion sequence converts the source type to
-          // the type required by the argument of the constructor
-          BeforeToType = 
Ctor->getParamDecl(0)->getType().getNonReferenceType();
+          // the type required by the argument of the constructor or the 'void'
+          // type if the argument has no constructors.
+          BeforeToType =
----------------
I think you mean "if the constructor has no parameters", right?


================
Comment at: lib/Sema/SemaExprCXX.cpp:3433
+              Ctor->param_empty()
+                  ? Context.VoidTy
+                  : Ctor->getParamDecl(0)->getType().getNonReferenceType();
----------------
It looks like this will result in us building an expression like `T(void({}))`. 
That would be invalid, and we shouldn't have it in the AST. Instead, we should 
probably build `T{}` for this case.


================
Comment at: test/SemaCXX/cxx11-crashes.cpp:109
+    const outer &o;    // expected-note {{reference member declared here}}
+    inner() : o({}) {} // expected-warning {{binding reference member 'o' to a 
temporary value}}
+  };
----------------
This case is ill-formed under 
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1696

Is there any way to tickle this problem without binding a class member to a 
temporary? If not, I'd prefer we instead implement DR1696 to eliminate the 
problem.


Repository:
  rL LLVM

https://reviews.llvm.org/D25719



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to