rsmith added inline comments.

================
Comment at: include/tuple:185-186
+        // Allow "int&&" to bind to 'int const&'
+        ||  (is_rvalue_reference<_Tp>::value && is_const<_RawHp>::value &&
+            is_same<_RawHp, const _RawTp>::value)
         >;
----------------
It would be reasonable to consider `is_base_of` here too.


================
Comment at: include/tuple:190
             || (is_lvalue_reference<_Hp>::value && _CheckLValueArg::value)
             || (is_rvalue_reference<_Hp>::value && 
!is_lvalue_reference<_Tp>::value);
+#else
----------------
This line looks wrong to me. This disallows an rvalue reference tuple member 
from binding to an rvalue reference argument, no? Can you
```
return !is_reference<_Hp>::value || (is_reference<_Tp>::value && 
is_convertible<_RawTp*, _RawHp*>::value) || (reference wrapper special case);
```
instead? That should at least only reject valid code in cases where `_RawTp` is 
a class type that converts to a reference type.


https://reviews.llvm.org/D41977



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

Reply via email to