mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-25 02:33:24 -03:00
Merge bitcoin/bitcoin#24416: doc: Avoid ADL for function calls
52a797bfe5
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, ACK52a797bfe5
, there is no need to hold merge up on this, documenting it is a step forward. Tree-SHA512: f52688b5d8f6130302185206ec6ea4731b099a75294ea2d477901a52d6d58473e3427e658aea408c140c2824c37a0399ec7376aded2a91197895ea52d51f0018
This commit is contained in:
commit
dd52f79a73
1 changed files with 22 additions and 0 deletions
|
@ -110,6 +110,28 @@ code.
|
|||
- `nullptr` is preferred over `NULL` or `(void*)0`.
|
||||
- `static_assert` is preferred over `assert` where possible. Generally; compile-time checking is preferred over run-time checking.
|
||||
|
||||
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…
Add table
Reference in a new issue