RFR: 8367536: Change RBTree to use C++17 features [v4]
Casper Norrbin
cnorrbin at openjdk.org
Thu Sep 18 13:35:31 UTC 2025
> Hi everyone,
>
> C++17 lets us tidy up som of the ugly templating done in the red-black tree. We can replace the `std::false_type`/`std::true_type` tricks used to discover comparator and verifier signatures with the new `std::is_invocable(_r_v)`, and most of the overload/SFINAE noise can disappear thanks to `if constexpr`.
>
> We can now write one-liners such as:
> ```c++
> static constexpr bool HasKeyComparator = std::is_invocable_r_v<RBTreeOrdering, decltype(&CMP::cmp), K, K>;
>
>
> and then select the right branch with
> ```c++
> if constexpr (HasKeyComparator<CMP>) { }
>
> inside a single function instead of having several `ENABLE_IF` overloads.
>
> This results in fewer lines, clearer intent, and more readable errors, while keeping behaviour identical.
>
> Testing:
> - Oracle tiers 1-3
Casper Norrbin has updated the pull request incrementally with one additional commit since the last revision:
Added clarifying note + change name to 'HasNodeVerifierImpl'
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/27260/files
- new: https://git.openjdk.org/jdk/pull/27260/files/6f52cbf1..184b5fc5
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=27260&range=03
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=27260&range=02-03
Stats: 5 lines in 1 file changed: 2 ins; 0 del; 3 mod
Patch: https://git.openjdk.org/jdk/pull/27260.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/27260/head:pull/27260
PR: https://git.openjdk.org/jdk/pull/27260
More information about the hotspot-dev
mailing list