[libcxx-commits] [PATCH] D149826: [libc++][ranges] Implement the changes to vector from P1206 (`ranges::to`):
Konstantin Varlamov via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Fri May 12 10:46:18 PDT 2023
var-const added a comment.
@rupprecht Just a heads-up: this patch refactors the internals of `vector` and thus carries some amount of risk of a possible breakage. The tests in this patch are quite extensive, but I'd still like to give you a warning just in case you notice any new failures that this patch could be the culprit.
Adding libc++-vendors to subscribers as well.
In D149826#4338357 <https://reviews.llvm.org/D149826#4338357>, @asmok-g wrote:
> Before this patch, if a non-copy-constructible Iterator was passed to the vector constructor `vector<_Tp, _Allocator>::vector(_InputIterator __first, _InputIterator __last)` it compiled, but now it gives the error: `call to deleted constructor of 'Iterator'`. Is that expected ?
>
> smth like
>
> #include <iterator>
> #include <vector>
>
> const char* data = "abc";
>
> class Iterator : public std::iterator<std::input_iterator_tag, const char> {
> public:
> explicit Iterator(const char c) {}
> Iterator(const Iterator& other) = delete;
> Iterator& operator=(const Iterator& other) = delete;
> reference operator*() const { return data[0]; }
> void operator++() {}
> bool operator==(const Iterator& other) const { return true; }
> bool operator!=(const Iterator& other) const { return false; }
> };
>
> class Elem {
> public:
> Elem() = default;
> explicit Elem(const char ref) {}
> };
>
> int main(int argc, char** argv) {
> std::vector<Elem>(Iterator(data[0]), Iterator(data[1]));
> }
Thank you for the report! Is this blocking you?
I will look into this today. Hopefully it's an easy fix.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D149826/new/
https://reviews.llvm.org/D149826
More information about the libcxx-commits
mailing list