ldionne added inline comments.

================
Comment at: libcxx/include/memory:1658
+                || !__has_construct<allocator_type, _DestTp*, const 
_SourceTp&>::value) &&
+             is_trivially_move_constructible<_DestTp>::value,
             void
----------------
Quuxplusone wrote:
> Shouldn't this be something like `is_trivially_constructible<_DestTp, 
> _SourceTp&>`?  I mean, we're never doing move-construction here. We're 
> constructing `_DestTp` from `_SourceTp&`, which is either copy-construction 
> or non-const-copy-construction, depending on the constness of `_SourceTp`.
> 
> `is_trivially_constructible` has pitfalls in general — 
> https://quuxplusone.github.io/blog/2018/07/03/trivially-constructible-from/ — 
> but I think we won't fall into any of those pits as long as we're testing 
> that `_SourceTp` is cv-qualified `_DestTp`.
> Shouldn't this be something like `is_trivially_constructible<_DestTp, 
> _SourceTp&>`?

I think you're right. We should also fix `__construct_forward` and 
`__construct_backward`, but maybe as part of a separate change since the three 
are consistently using `is_trivially_move_constructible` (and so there might be 
a reason for this).


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D48342/new/

https://reviews.llvm.org/D48342



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

Reply via email to