RFR: 8367536: Change RBTree to use C++17 features

Casper Norrbin cnorrbin at openjdk.org
Fri Sep 12 14:07:25 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

-------------

Commit messages:
 - is_invocable/if constexpr

Changes: https://git.openjdk.org/jdk/pull/27260/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=27260&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8367536
  Stats: 61 lines in 2 files changed: 9 ins; 23 del; 29 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