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
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits