EricWF added inline comments.

================
Comment at: include/string:782
     _LIBCPP_INLINE_VISIBILITY
     basic_string(const value_type* __s, size_type __n);
     _LIBCPP_INLINE_VISIBILITY
----------------
rsmith wrote:
> EricWF wrote:
> > rsmith wrote:
> > > Did you skip this one intentionally?
> > Yes. `size_type`  is a typedef for 
> > `allocator_traits<Allocator>::size_type`, This causes the 
> > `basic_string(CharT*, Allocator const&)` to always be chosen instead, 
> > resulting in a incorrect allocator type.
> I don't think it will always be chosen instead; if the argument is of type 
> `size_t`, the `(const CharT*, size_type)` overload should be chosen.
OK, so it's not that it should always be taken. Instead I think any attempt to 
form the implicit deduction guide overloads for such a call will end up 
attempting to evaluate `std::basic_string<char, char_traits<char>, unsigned 
long long>` which is an ill-formed instantiation of `basic_string`.


So if building the overload set were to succeed then yes, the `(const CharT*, 
size_type)` would be callable with an argument of `size_type`. However it seems 
that the overload set is poisoned by `(const CharT*, Allocator)`





https://reviews.llvm.org/D29863



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

Reply via email to