Don’t Get Overloaded by C++ Overload Sets
summary
Covers concrete overload-resolution mechanics: name lookup picks one scope then overload resolution ranks exact match, promotions before conversions, user‑defined conversions, then ellipsis; initializer-list takes priority over other overloads and default construction; templates compete by “most specialized” rules and non‑templates win ties; ADL brings functions from argument namespaces; illustrates real bugs — an implicit conversion making std::optional appear engaged, hiding of base overloads in derived classes and multiple‑inheritance ambiguities — and gives fixes: using-declarations, tagging, or wrapping functions in a struct to prevent ADL.
AI-written summary · about
chapters (18)
- 0:00Introduction
- 1:30Overload sets in C++
- 5:21Overload sets in practice
- 12:26How overload sets resolve
- 17:04Argument dependent lookup
- 19:56Overload resolution rules
- 27:46Overload resolution with templates
- 32:20Gotchas with templates
- 37:23Member function overload sets
- 41:15Qualified member overloads
- 44:32Controlling overload sets
- 49:32Avoiding overload sets
- 50:15Using lambdas
- 55:05Designing overload sets
- 57:32Tag dispatching
- 59:18Virtual functions and overloads
- 1:02:52Value category overloads
- 1:04:17Summary
related talks
22mOverloading: The Bane of All Higher-Order Functions
51mArgument dependent lookup (ADL): name taxonomy, customization points & use cases
55mCustom Overload Sets and Inline SFINAE for Truly Generic Interfaces
12mTraits Go Mainstream...
41mC++ Overload Inspector - A Tool for Analyzing and Profiling Overloaded Function Calls
01h 35mC++20 – My Favourite Code Examples
55mHow to "OO" in C++
15mC++ WAT
