[Bug libstdc++/89477] New: Incorrect CTAD deduction guides for set and multiset
arthur.j.odwyer at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sat Feb 23 20:54:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89477
Bug ID: 89477
Summary: Incorrect CTAD deduction guides for set and multiset
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: arthur.j.odwyer at gmail dot com
Target Milestone: ---
I just implemented set/multiset deduction guides for libc++ because they were
missing entirely. My regression test fails on libstdc++ trunk.
The full test is here (non-GNU code warning!) https://reviews.llvm.org/D58582
and https://godbolt.org/z/4-OFMh
The reduced test case is:
```
// https://godbolt.org/z/0TNJ59
#include <set>
#include <memory_resource>
int main()
{
std::pmr::polymorphic_allocator<int> a;
int arr[] = {1,2,3};
std::set s(arr, arr+3, a); // ERROR
std::set t({1, 2, 3}, a); // ERROR
}
```
libstdc++ believes that CTAD is ambiguous here because although it is obvious
that "arr" and "arr+3" are InputIterators, it is not sure whether
"std::pmr::polymorphic_allocator<int>()" is intended to be an Allocator or a
Compare.
http://eel.is/c++draft/container.requirements#associative.reqmts-15.3
is clear that a deduction guide template parameter named Compare should not
pick up anything which "qualifies as an allocator." So this CTAD should be
unambiguous.
More information about the Gcc-bugs
mailing list