Implement the changes in all language modes. LWG3506 "Missing allocator-extended constructors for priority_queue" makes the following changes: - New allocator-extended constructors for priority_queue. - New deduction guides targeting those constructors. LWG3522: "Missing requirement on InputIterator template parameter for priority_queue constructors". The iterator parameter should be constrained to actually be an iterator type. `priority_queue{1,2}` should be SFINAE-friendly ill-formed. Also, do a drive-by fix in the allocator-extended move constructor: there's no need to do a `make_heap` after moving from `__q.c` into our own `c`, because that container was already heapified when it was part of `__q`. [priqueue.cons.alloc] actually specifies the behavior and does *not* mention calling `make_heap`. I think this was just a copy-paste thinko. It dates back to the initial import of libc++.
Details
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
libcxx/test/std/containers/container.adaptors/priority.queue/priqueue.cons/ctor_iter_constraint.compile.pass.cpp | ||
---|---|---|
22 | I had initially written this test as follows, to test SFINAE-friendliness; but during the rebase I temporarily forgot why I'd done that, and changed it to the much simpler (but not-testing-SFINAE) version you see above. If you want me to change back to the SFINAE version, I can. template<class Seq> std::true_type test(int, decltype(Seq(1,2))) { return {}; } template<class Seq> std::false_type test(long, Seq) { return {}; } int main(int, char**) { // Sanity-check that std::vector<int>(1,2) is well-formed. auto vector_is_constructible = test< std::vector<int> >(1, {}); static_assert(decltype(vector_is_constructible)::value, ""); // LWG3522: std::priority_queue<int>(1,2) is NOT well-formed. auto pq_is_constructible = test< std::priority_queue<int> >(1, {}); static_assert(!decltype(pq_is_constructible)::value, ""); return 0; } |
libcxx/test/std/containers/container.adaptors/priority.queue/priqueue.cons/ctor_iter_constraint.compile.pass.cpp | ||
---|---|---|
19 | You're missing tests for some of the constructors you modified, aren't you? |
Landed as part of rG3894a8a4768f
libcxx/test/std/containers/container.adaptors/priority.queue/priqueue.cons/ctor_iter_constraint.compile.pass.cpp | ||
---|---|---|
19 | Yes; initially this was just a sanity-check to make sure that e.g. |
You're missing tests for some of the constructors you modified, aren't you?