[Bug libstdc++/116038] ambiguous overload in bind_front caused by deducing this
ppalka at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Jul 22 22:43:50 GMT 2024
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116038
Patrick Palka <ppalka at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |ASSIGNED
Ever confirmed|0 |1
Last reconfirmed| |2024-07-22
Assignee|unassigned at gcc dot gnu.org |ppalka at gcc dot gnu.org
--- Comment #6 from Patrick Palka <ppalka at gcc dot gnu.org> ---
I think we just need to explicitly qualify the ambiguous member lookups:
--- a/libstdc++-v3/include/std/functional
+++ b/libstdc++-v3/include/std/functional
@@ -1015,8 +1015,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
decltype(auto)
_S_call(_Tp&& __g, index_sequence<_Ind...>, _CallArgs&&... __call_args)
{
- return std::invoke(std::forward<_Tp>(__g)._M_fd,
- std::get<_Ind>(std::forward<_Tp>(__g)._M_bound_args)...,
+ return std::invoke(std::forward<_Tp>(__g)._Bind_front::_M_fd,
+
std::get<_Ind>(std::forward<_Tp>(__g)._Bind_front::_M_bound_args)...,
std::forward<_CallArgs>(__call_args)...);
}
_Bind_back and the other users of deducing this in the stdlib should get
audited/fixed accordingly.
FWIW the deducing this paper has a couple of sections about this pitfall:
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0847r7.html#name-lookup-within-member-functions
and the one after that.
More information about the Gcc-bugs
mailing list