This issue affects both virtual and non-virtual member functions
For variadic bases, C++17 introduced a variadic form of the using-declaration,
template <class...Ts>
struct Overloader : Ts... {
using Ts::operator()...; // exposes operator() from every base
};
##### Enforcement
Diagnose name hiding
### <aname="Rh-final"></a>C.139: Use `final` sparingly
### <aname="Rh-final"></a>C.139: Use `final` sparingly
@ -11659,16 +11697,16 @@ this can be a security risk.
##### Enforcement
##### Enforcement
Some is possible, do at least something.
When possible, rely on tooling enforcement, but be aware that any tooling
There are commercial and open-source tools that try to address this problem, but static tools often have many false positives and run-time tools often have a significant cost.
solution has costs and blind spots. Defense in depth (multiple tools, multiple
We hope for better tools.
approaches) is particularly valuable here.
Help the tools:
There are other ways you can mitigate the chance of data races:
* less global data
* Avoid global data
* fewer`static` variables
* Avoid`static` variables
* more use of stack memory (and don't pass pointers around too much)
* More use of value types on the stack (and don't pass pointers around too much)
* more immutable data (literals, `constexpr`, and `const`)
* More use of immutable data (literals, `constexpr`, and `const`)
### <aname="Rconc-data"></a>CP.3: Minimize explicit sharing of writable data
### <aname="Rconc-data"></a>CP.3: Minimize explicit sharing of writable data