From 15c1ec21b3da52d662f5fc88870dc85c816ef6f5 Mon Sep 17 00:00:00 2001 From: Alexander Farber Date: Sat, 6 Dec 2025 20:09:36 +0100 Subject: [PATCH 1/5] Replace 2 remaining std::is_trivial --- include/extractor/edge_based_graph_factory.hpp | 4 +++- include/util/fingerprint.hpp | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/include/extractor/edge_based_graph_factory.hpp b/include/extractor/edge_based_graph_factory.hpp index dd5454f519a..2274b207a1d 100644 --- a/include/extractor/edge_based_graph_factory.hpp +++ b/include/extractor/edge_based_graph_factory.hpp @@ -44,7 +44,9 @@ struct TurnIndexBlock NodeID to_id; }; #pragma pack(pop) -static_assert(std::is_trivial::value, "TurnIndexBlock is not trivial"); +static_assert(std::is_trivially_default_constructible::value && + std::is_trivially_copyable::value, + "TurnIndexBlock is not trivial"); static_assert(sizeof(TurnIndexBlock) == 12, "TurnIndexBlock is not packed correctly"); } // namespace lookup diff --git a/include/util/fingerprint.hpp b/include/util/fingerprint.hpp index d28264a53a5..7e10d1ad3b5 100644 --- a/include/util/fingerprint.hpp +++ b/include/util/fingerprint.hpp @@ -32,7 +32,9 @@ struct FingerPrint }; static_assert(sizeof(FingerPrint) == 8, "FingerPrint has unexpected size"); -static_assert(std::is_trivial::value, "FingerPrint needs to be trivial."); +static_assert(std::is_trivially_default_constructible::value && + std::is_trivially_copyable::value, + "FingerPrint needs to be trivial."); static_assert(std::is_standard_layout::value, "FingerPrint needs have a standard layout."); } // namespace osrm::util From 4450c18964b7979e16e9209dbae5ad15f0b34a18 Mon Sep 17 00:00:00 2001 From: Alexander Farber Date: Sat, 6 Dec 2025 21:12:36 +0100 Subject: [PATCH 2/5] Replace two-condition static_assert with three-condition pattern to fix clang-tidy misc-redundant-expression error --- include/extractor/edge_based_graph_factory.hpp | 5 +++-- include/util/fingerprint.hpp | 7 +++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/extractor/edge_based_graph_factory.hpp b/include/extractor/edge_based_graph_factory.hpp index 2274b207a1d..75aabacecc1 100644 --- a/include/extractor/edge_based_graph_factory.hpp +++ b/include/extractor/edge_based_graph_factory.hpp @@ -44,9 +44,10 @@ struct TurnIndexBlock NodeID to_id; }; #pragma pack(pop) -static_assert(std::is_trivially_default_constructible::value && +static_assert(std::is_standard_layout::value && + std::is_trivially_default_constructible::value && std::is_trivially_copyable::value, - "TurnIndexBlock is not trivial"); + "TurnIndexBlock is not trivial or does not have standard layout"); static_assert(sizeof(TurnIndexBlock) == 12, "TurnIndexBlock is not packed correctly"); } // namespace lookup diff --git a/include/util/fingerprint.hpp b/include/util/fingerprint.hpp index 7e10d1ad3b5..d3bbdd5f056 100644 --- a/include/util/fingerprint.hpp +++ b/include/util/fingerprint.hpp @@ -32,11 +32,10 @@ struct FingerPrint }; static_assert(sizeof(FingerPrint) == 8, "FingerPrint has unexpected size"); -static_assert(std::is_trivially_default_constructible::value && +static_assert(std::is_standard_layout::value && + std::is_trivially_default_constructible::value && std::is_trivially_copyable::value, - "FingerPrint needs to be trivial."); -static_assert(std::is_standard_layout::value, - "FingerPrint needs have a standard layout."); + "FingerPrint needs to be trivial and have a standard layout."); } // namespace osrm::util #endif /* FingerPrint_H */ From b847e7f4108f19b050c56778668f2d90d047c6c6 Mon Sep 17 00:00:00 2001 From: Alexander Farber Date: Sun, 7 Dec 2025 10:39:07 +0100 Subject: [PATCH 3/5] Split static asserts to avoid clang-tidy misc-redundant-expression warning --- .../extractor/edge_based_graph_factory.hpp | 10 +-- include/util/coordinate.hpp | 67 ++++++++++++------- include/util/fingerprint.hpp | 12 ++-- include/util/typedefs.hpp | 24 ++++--- 4 files changed, 70 insertions(+), 43 deletions(-) diff --git a/include/extractor/edge_based_graph_factory.hpp b/include/extractor/edge_based_graph_factory.hpp index 75aabacecc1..79d03651fa0 100644 --- a/include/extractor/edge_based_graph_factory.hpp +++ b/include/extractor/edge_based_graph_factory.hpp @@ -44,10 +44,12 @@ struct TurnIndexBlock NodeID to_id; }; #pragma pack(pop) -static_assert(std::is_standard_layout::value && - std::is_trivially_default_constructible::value && - std::is_trivially_copyable::value, - "TurnIndexBlock is not trivial or does not have standard layout"); +// Note: Conditions are split into separate static_asserts to avoid +// clang-tidy misc-redundant-expression warning. +static_assert(std::is_trivially_default_constructible::value, + "TurnIndexBlock must be trivially default constructible."); +static_assert(std::is_trivially_copyable::value, + "TurnIndexBlock must be trivially copyable."); static_assert(sizeof(TurnIndexBlock) == 12, "TurnIndexBlock is not packed correctly"); } // namespace lookup diff --git a/include/util/coordinate.hpp b/include/util/coordinate.hpp index 3fd66e7b328..95158d0fa67 100644 --- a/include/util/coordinate.hpp +++ b/include/util/coordinate.hpp @@ -68,30 +68,49 @@ using FloatLongitude = Alias; // range checks on these (toFixed/toFloat, etc) using UnsafeFloatLatitude = Alias; using UnsafeFloatLongitude = Alias; -static_assert(std::is_standard_layout() && - std::is_trivially_default_constructible() && - std::is_trivially_copyable(), - "FixedLatitude is not a valid alias"); -static_assert(std::is_standard_layout() && - std::is_trivially_default_constructible() && - std::is_trivially_copyable(), - "FixedLongitude is not a valid alias"); -static_assert(std::is_standard_layout() && - std::is_trivially_default_constructible() && - std::is_trivially_copyable(), - "FloatLatitude is not a valid alias"); -static_assert(std::is_standard_layout() && - std::is_trivially_default_constructible() && - std::is_trivially_copyable(), - "FloatLongitude is not a valid alias"); -static_assert(std::is_standard_layout() && - std::is_trivially_default_constructible() && - std::is_trivially_copyable(), - "UnsafeFloatLatitude is not a valid alias"); -static_assert(std::is_standard_layout() && - std::is_trivially_default_constructible() && - std::is_trivially_copyable(), - "UnsafeFloatLongitude is not a valid alias"); +// Note: Conditions are split into separate static_asserts to avoid +// clang-tidy misc-redundant-expression warning. +static_assert(std::is_standard_layout(), + "FixedLatitude must have standard layout."); +static_assert(std::is_trivially_default_constructible(), + "FixedLatitude must be trivially default constructible."); +static_assert(std::is_trivially_copyable(), + "FixedLatitude must be trivially copyable."); + +static_assert(std::is_standard_layout(), + "FixedLongitude must have standard layout."); +static_assert(std::is_trivially_default_constructible(), + "FixedLongitude must be trivially default constructible."); +static_assert(std::is_trivially_copyable(), + "FixedLongitude must be trivially copyable."); + +static_assert(std::is_standard_layout(), + "FloatLatitude must have standard layout."); +static_assert(std::is_trivially_default_constructible(), + "FloatLatitude must be trivially default constructible."); +static_assert(std::is_trivially_copyable(), + "FloatLatitude must be trivially copyable."); + +static_assert(std::is_standard_layout(), + "FloatLongitude must have standard layout."); +static_assert(std::is_trivially_default_constructible(), + "FloatLongitude must be trivially default constructible."); +static_assert(std::is_trivially_copyable(), + "FloatLongitude must be trivially copyable."); + +static_assert(std::is_standard_layout(), + "UnsafeFloatLatitude must have standard layout."); +static_assert(std::is_trivially_default_constructible(), + "UnsafeFloatLatitude must be trivially default constructible."); +static_assert(std::is_trivially_copyable(), + "UnsafeFloatLatitude must be trivially copyable."); + +static_assert(std::is_standard_layout(), + "UnsafeFloatLongitude must have standard layout."); +static_assert(std::is_trivially_default_constructible(), + "UnsafeFloatLongitude must be trivially default constructible."); +static_assert(std::is_trivially_copyable(), + "UnsafeFloatLongitude must be trivially copyable."); /** * Converts a typed latitude from floating to fixed representation. diff --git a/include/util/fingerprint.hpp b/include/util/fingerprint.hpp index d3bbdd5f056..c66d6e6d7d3 100644 --- a/include/util/fingerprint.hpp +++ b/include/util/fingerprint.hpp @@ -32,10 +32,14 @@ struct FingerPrint }; static_assert(sizeof(FingerPrint) == 8, "FingerPrint has unexpected size"); -static_assert(std::is_standard_layout::value && - std::is_trivially_default_constructible::value && - std::is_trivially_copyable::value, - "FingerPrint needs to be trivial and have a standard layout."); +// Note: Conditions are split into separate static_asserts to avoid +// clang-tidy misc-redundant-expression warning. +static_assert(std::is_trivially_default_constructible::value, + "FingerPrint needs to be trivially default constructible."); +static_assert(std::is_trivially_copyable::value, + "FingerPrint needs to be trivially copyable."); +static_assert(std::is_standard_layout::value, + "FingerPrint needs to have a standard layout."); } // namespace osrm::util #endif /* FingerPrint_H */ diff --git a/include/util/typedefs.hpp b/include/util/typedefs.hpp index f03c019ff0c..c55fcce6bfa 100644 --- a/include/util/typedefs.hpp +++ b/include/util/typedefs.hpp @@ -69,18 +69,20 @@ struct turn_penalty } // namespace tag using OSMNodeID = osrm::Alias; -// clang-tidy fires `bugprone-throw-keyword-missing` here for unknown reason -// NOLINTNEXTLINE(bugprone-throw-keyword-missing) -static_assert(std::is_standard_layout() && - std::is_trivially_default_constructible() && - std::is_trivially_copyable(), - "OSMNodeID is not a valid alias"); +// Note: Conditions are split into separate static_asserts to avoid +// clang-tidy misc-redundant-expression warning. +static_assert(std::is_standard_layout(), "OSMNodeID must have standard layout."); +static_assert(std::is_trivially_default_constructible(), + "OSMNodeID must be trivially default constructible."); +static_assert(std::is_trivially_copyable(), "OSMNodeID must be trivially copyable."); + using OSMWayID = osrm::Alias; -// NOLINTNEXTLINE(bugprone-throw-keyword-missing) -static_assert(std::is_standard_layout() && - std::is_trivially_default_constructible() && - std::is_trivially_copyable(), - "OSMWayID is not a valid alias"); +// Note: Conditions are split into separate static_asserts to avoid +// clang-tidy misc-redundant-expression warning. +static_assert(std::is_standard_layout(), "OSMWayID must have standard layout."); +static_assert(std::is_trivially_default_constructible(), + "OSMWayID must be trivially default constructible."); +static_assert(std::is_trivially_copyable(), "OSMWayID must be trivially copyable."); using DuplicatedNodeID = std::uint64_t; using RestrictionID = std::uint64_t; From 3eeed7bbab231aa9bac92bf195775658226b10ce Mon Sep 17 00:00:00 2001 From: Alexander Farber Date: Sun, 7 Dec 2025 10:42:06 +0100 Subject: [PATCH 4/5] Fix format issue --- include/util/coordinate.hpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/include/util/coordinate.hpp b/include/util/coordinate.hpp index 95158d0fa67..96da87e92df 100644 --- a/include/util/coordinate.hpp +++ b/include/util/coordinate.hpp @@ -70,8 +70,7 @@ using UnsafeFloatLatitude = Alias; using UnsafeFloatLongitude = Alias; // Note: Conditions are split into separate static_asserts to avoid // clang-tidy misc-redundant-expression warning. -static_assert(std::is_standard_layout(), - "FixedLatitude must have standard layout."); +static_assert(std::is_standard_layout(), "FixedLatitude must have standard layout."); static_assert(std::is_trivially_default_constructible(), "FixedLatitude must be trivially default constructible."); static_assert(std::is_trivially_copyable(), @@ -84,8 +83,7 @@ static_assert(std::is_trivially_default_constructible(), static_assert(std::is_trivially_copyable(), "FixedLongitude must be trivially copyable."); -static_assert(std::is_standard_layout(), - "FloatLatitude must have standard layout."); +static_assert(std::is_standard_layout(), "FloatLatitude must have standard layout."); static_assert(std::is_trivially_default_constructible(), "FloatLatitude must be trivially default constructible."); static_assert(std::is_trivially_copyable(), From b944f9f2232a1d043050ad8c78a09e0c93a853ef Mon Sep 17 00:00:00 2001 From: Alexander Farber Date: Sun, 7 Dec 2025 11:36:36 +0100 Subject: [PATCH 5/5] Remove the comments --- include/extractor/edge_based_graph_factory.hpp | 2 -- include/util/coordinate.hpp | 2 -- include/util/fingerprint.hpp | 2 -- include/util/typedefs.hpp | 4 ---- 4 files changed, 10 deletions(-) diff --git a/include/extractor/edge_based_graph_factory.hpp b/include/extractor/edge_based_graph_factory.hpp index 79d03651fa0..fed9074988d 100644 --- a/include/extractor/edge_based_graph_factory.hpp +++ b/include/extractor/edge_based_graph_factory.hpp @@ -44,8 +44,6 @@ struct TurnIndexBlock NodeID to_id; }; #pragma pack(pop) -// Note: Conditions are split into separate static_asserts to avoid -// clang-tidy misc-redundant-expression warning. static_assert(std::is_trivially_default_constructible::value, "TurnIndexBlock must be trivially default constructible."); static_assert(std::is_trivially_copyable::value, diff --git a/include/util/coordinate.hpp b/include/util/coordinate.hpp index 96da87e92df..9b23c3e1e68 100644 --- a/include/util/coordinate.hpp +++ b/include/util/coordinate.hpp @@ -68,8 +68,6 @@ using FloatLongitude = Alias; // range checks on these (toFixed/toFloat, etc) using UnsafeFloatLatitude = Alias; using UnsafeFloatLongitude = Alias; -// Note: Conditions are split into separate static_asserts to avoid -// clang-tidy misc-redundant-expression warning. static_assert(std::is_standard_layout(), "FixedLatitude must have standard layout."); static_assert(std::is_trivially_default_constructible(), "FixedLatitude must be trivially default constructible."); diff --git a/include/util/fingerprint.hpp b/include/util/fingerprint.hpp index c66d6e6d7d3..8e7ca1e832f 100644 --- a/include/util/fingerprint.hpp +++ b/include/util/fingerprint.hpp @@ -32,8 +32,6 @@ struct FingerPrint }; static_assert(sizeof(FingerPrint) == 8, "FingerPrint has unexpected size"); -// Note: Conditions are split into separate static_asserts to avoid -// clang-tidy misc-redundant-expression warning. static_assert(std::is_trivially_default_constructible::value, "FingerPrint needs to be trivially default constructible."); static_assert(std::is_trivially_copyable::value, diff --git a/include/util/typedefs.hpp b/include/util/typedefs.hpp index c55fcce6bfa..ab6abc750f7 100644 --- a/include/util/typedefs.hpp +++ b/include/util/typedefs.hpp @@ -69,16 +69,12 @@ struct turn_penalty } // namespace tag using OSMNodeID = osrm::Alias; -// Note: Conditions are split into separate static_asserts to avoid -// clang-tidy misc-redundant-expression warning. static_assert(std::is_standard_layout(), "OSMNodeID must have standard layout."); static_assert(std::is_trivially_default_constructible(), "OSMNodeID must be trivially default constructible."); static_assert(std::is_trivially_copyable(), "OSMNodeID must be trivially copyable."); using OSMWayID = osrm::Alias; -// Note: Conditions are split into separate static_asserts to avoid -// clang-tidy misc-redundant-expression warning. static_assert(std::is_standard_layout(), "OSMWayID must have standard layout."); static_assert(std::is_trivially_default_constructible(), "OSMWayID must be trivially default constructible.");