mirror of
https://github.com/dashpay/dash.git
synced 2024-12-24 19:42:46 +01:00
Merge bitcoin/bitcoin#24416: doc: Avoid ADL for function calls
52a797bfe5ced4329f2272be417c35730ec8839f doc: Avoid ADL for function calls (Hennadii Stepanov)
Pull request description:
It happened two times recently, when [ADL](https://en.cppreference.com/w/cpp/language/adl) popped up unexpectedly and brought some confusion:
- https://github.com/bitcoin/bitcoin/pull/24338/files#r805989994
> Any idea why this even compiles?
- https://www.erisian.com.au/bitcoin-core-dev/log-2022-02-18.html#l-51:
> 2022-02-18T03:24:14 \<dongcarl\> Does anyone know why this compiles? 6d3d2caa37
> 2022-02-18T03:24:14 \<dongcarl\> GetUTXOStatsWithHasher and MakeUTXOHasher are both in the `kernel::` namespace and I never added a `using` declaration on top...
> 2022-02-18T03:25:53 \<sipa\> https://en.cppreference.com/w/cpp/language/adl ?
Let's document our intention to avoid similar cases in the future.
ACKs for top commit:
laanwj:
Anyhow, ACK 52a797bfe5ced4329f2272be417c35730ec8839f, there is no need to hold merge up on this, documenting it is a step forward.
Tree-SHA512: f52688b5d8f6130302185206ec6ea4731b099a75294ea2d477901a52d6d58473e3427e658aea408c140c2824c37a0399ec7376aded2a91197895ea52d51f0018
This commit is contained in:
parent
4d56397d96
commit
e556af3ef8
@ -106,6 +106,28 @@ code.
|
||||
- `static_assert` is preferred over `assert` where possible. Generally; compile-time checking is preferred over run-time checking.
|
||||
- Align pointers and references to the left i.e. use `type& var` and not `type &var`.
|
||||
|
||||
For function calls a namespace should be specified explicitly, unless such functions have been declared within it.
|
||||
Otherwise, [argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl), also known as ADL, could be
|
||||
triggered that makes code harder to maintain and reason about:
|
||||
```c++
|
||||
#include <filesystem>
|
||||
|
||||
namespace fs {
|
||||
class path : public std::filesystem::path
|
||||
{
|
||||
};
|
||||
// The intention is to disallow this function.
|
||||
bool exists(const fs::path& p) = delete;
|
||||
} // namespace fs
|
||||
|
||||
int main()
|
||||
{
|
||||
//fs::path p; // error
|
||||
std::filesystem::path p; // compiled
|
||||
exists(p); // ADL being used for unqualified name lookup
|
||||
}
|
||||
```
|
||||
|
||||
Block style example:
|
||||
```c++
|
||||
int g_count = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user