https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101571
Bug ID: 101571 Summary: DestroyGuard used by the ranges::uninitialized family should use addressof() Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: hewillk at gmail dot com Target Milestone: --- The Standard Library should consistently use addressof() to defend itself against overloaded operator&(). #include <memory> struct I { using value_type = std::string; using difference_type = std::ptrdiff_t; I& operator++(); I operator++(int); value_type& operator*() const; void operator&() = delete; bool operator==(const I&) const; }; int main() { std::ranges::uninitialized_default_construct(I{}, I{}); } https://godbolt.org/z/5Pb67b9jx