From f932a42d336febfa7d92b87ee0db9266633ff0e0 Mon Sep 17 00:00:00 2001 From: sakirr Date: Sat, 7 Feb 2026 21:52:38 +0000 Subject: [PATCH 1/2] clang-tidy: fix explicit virtual functions in remaining headers (Fix #3045) --- .clang-tidy | 1 - include/bdAstar/bdAstar.hpp | 6 +++--- include/bdDijkstra/bdDijkstra.hpp | 6 +++--- include/dagShortestPath/dagShortestPath.hpp | 2 +- include/spanningTree/kruskal.hpp | 4 ++-- include/spanningTree/prim.hpp | 4 ++-- include/visitors/astar_visitors.hpp | 2 +- include/visitors/dfs_visitor.hpp | 6 +++--- include/visitors/dfs_visitor_with_root.hpp | 4 ++-- include/visitors/dijkstra_visitors.hpp | 12 ++++++------ include/visitors/edges_order_bfs_visitor.hpp | 2 +- include/visitors/edges_order_dfs_visitor.hpp | 2 +- include/visitors/prim_dijkstra_visitor.hpp | 2 +- include/yen/turnRestrictedPath.hpp | 4 ++-- 14 files changed, 28 insertions(+), 29 deletions(-) diff --git a/.clang-tidy b/.clang-tidy index 64c57ac950..49e269da46 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -11,7 +11,6 @@ Checks: > -cppcoreguidelines-avoid-const-or-ref-data-members, -cppcoreguidelines-avoid-do-while, -cppcoreguidelines-avoid-magic-numbers, - -cppcoreguidelines-explicit-virtual-functions, -cppcoreguidelines-macro-usage, -cppcoreguidelines-narrowing-conversions, -cppcoreguidelines-no-malloc, diff --git a/include/bdAstar/bdAstar.hpp b/include/bdAstar/bdAstar.hpp index a526b89722..df20877cb3 100644 --- a/include/bdAstar/bdAstar.hpp +++ b/include/bdAstar/bdAstar.hpp @@ -78,7 +78,7 @@ class Pgr_bdAstar : public Pgr_bidirectional { m_log << "pgr_bdAstar constructor\n"; } - virtual ~Pgr_bdAstar() = default; + ~Pgr_bdAstar() override = default; Path pgr_bdAstar(V start_vertex, V end_vertex, int heuristic, @@ -98,7 +98,7 @@ class Pgr_bdAstar : public Pgr_bidirectional { using Pgr_bidirectional::clean_log; private: - void explore_forward(const Cost_Vertex_pair &node) { + void explore_forward(const Cost_Vertex_pair &node) override { typename G::EO_i out, out_end; auto current_node = node.second; @@ -124,7 +124,7 @@ class Pgr_bdAstar : public Pgr_bidirectional { forward_finished[current_node] = true; } - void explore_backward(const Cost_Vertex_pair &node) { + void explore_backward(const Cost_Vertex_pair &node) override { typename G::EI_i in, in_end; auto current_cost = node.first; diff --git a/include/bdDijkstra/bdDijkstra.hpp b/include/bdDijkstra/bdDijkstra.hpp index 96e975c090..4f652fa102 100644 --- a/include/bdDijkstra/bdDijkstra.hpp +++ b/include/bdDijkstra/bdDijkstra.hpp @@ -80,7 +80,7 @@ class Pgr_bdDijkstra : public Pgr_bidirectional { m_log << "pgr_bdDijkstra constructor\n"; } - virtual ~Pgr_bdDijkstra() = default; + ~Pgr_bdDijkstra() override = default; Path pgr_bdDijkstra(V start_vertex, V end_vertex, bool only_cost) { m_log << "pgr_bdDijkstra\n"; @@ -96,7 +96,7 @@ class Pgr_bdDijkstra : public Pgr_bidirectional { private: - void explore_forward(const Cost_Vertex_pair &node) { + void explore_forward(const Cost_Vertex_pair &node) override { typename G::EO_i out, out_end; auto current_cost = node.first; @@ -119,7 +119,7 @@ class Pgr_bdDijkstra : public Pgr_bidirectional { forward_finished[current_node] = true; } - void explore_backward(const Cost_Vertex_pair &node) { + void explore_backward(const Cost_Vertex_pair &node) override { typename G::EI_i in, in_end; auto current_cost = node.first; diff --git a/include/dagShortestPath/dagShortestPath.hpp b/include/dagShortestPath/dagShortestPath.hpp index 5b78b5ffa7..24ebe61ccd 100644 --- a/include/dagShortestPath/dagShortestPath.hpp +++ b/include/dagShortestPath/dagShortestPath.hpp @@ -197,7 +197,7 @@ class Pgr_dag { m_goals(goals), m_n_goals(n_goals) {} template - void examine_vertex(V u, B_G &) { + void examine_vertex(V u, B_G &) override { auto s_it = m_goals.find(u); if (s_it == m_goals.end()) return; diff --git a/include/spanningTree/kruskal.hpp b/include/spanningTree/kruskal.hpp index 5fbddf0302..77f4df4dac 100644 --- a/include/spanningTree/kruskal.hpp +++ b/include/spanningTree/kruskal.hpp @@ -42,7 +42,7 @@ namespace functions { template class Pgr_kruskal : public Pgr_mst { public: - virtual ~Pgr_kruskal() = default; + ~Pgr_kruskal() override = default; std::vector kruskal(G &graph); std::vector kruskalBFS( @@ -66,7 +66,7 @@ class Pgr_kruskal : public Pgr_mst { typedef typename G::E E; /* Does all the work */ - void generate_mst(const G &graph); + void generate_mst(const G &graph) override; }; diff --git a/include/spanningTree/prim.hpp b/include/spanningTree/prim.hpp index 2ecde2453a..dec89f6de8 100644 --- a/include/spanningTree/prim.hpp +++ b/include/spanningTree/prim.hpp @@ -51,7 +51,7 @@ class Pgr_prim : public Pgr_mst { typedef typename G::B_G B_G; public: - virtual ~Pgr_prim() = default; + ~Pgr_prim() override = default; std::vector prim(G &graph); std::vector primBFS( @@ -82,7 +82,7 @@ class Pgr_prim : public Pgr_mst { const G &graph, int64_t root_vertex); - void generate_mst(const G &graph); + void generate_mst(const G &graph) override; private: // Member diff --git a/include/visitors/astar_visitors.hpp b/include/visitors/astar_visitors.hpp index fd26a969f9..c004bbd32f 100644 --- a/include/visitors/astar_visitors.hpp +++ b/include/visitors/astar_visitors.hpp @@ -43,7 +43,7 @@ class astar_many_goals_visitor : public boost::default_astar_visitor { explicit astar_many_goals_visitor(const std::set &goals) :m_goals(goals) {} template - void examine_vertex(V u, B_G &g) { + void examine_vertex(V u, B_G &g) override { auto s_it = m_goals.find(u); if (s_it == m_goals.end()) return; // found one more goal diff --git a/include/visitors/dfs_visitor.hpp b/include/visitors/dfs_visitor.hpp index 73064185c7..696f536788 100644 --- a/include/visitors/dfs_visitor.hpp +++ b/include/visitors/dfs_visitor.hpp @@ -59,13 +59,13 @@ class Dfs_visitor : public boost::default_dfs_visitor { m_depth.resize(m_graph.num_vertices(), 0); } template - void start_vertex(V v, const B_G&) { + void start_vertex(V v, const B_G&) override { // exception for visitor termination if (v != m_roots) throw found_goals(); m_depth[v] = 0; } template - void examine_edge(E e, const B_G&) { + void examine_edge(E e, const B_G&) override { auto source = m_graph.source(e), target = m_graph.target(e); // If the target has not been visited before if (m_depth[target] == 0 && target != m_roots) { @@ -79,7 +79,7 @@ class Dfs_visitor : public boost::default_dfs_visitor { } } template - void tree_edge(E e, const B_G&) { + void tree_edge(E e, const B_G&) override { m_data.push_back(e); } diff --git a/include/visitors/dfs_visitor_with_root.hpp b/include/visitors/dfs_visitor_with_root.hpp index 0cf80818e8..73c07b823d 100644 --- a/include/visitors/dfs_visitor_with_root.hpp +++ b/include/visitors/dfs_visitor_with_root.hpp @@ -47,11 +47,11 @@ class Dfs_visitor_with_root : public boost::default_dfs_visitor { m_data(data), m_roots(root) {} template - void tree_edge(E e, const B_G&) { + void tree_edge(E e, const B_G&) override { m_data.push_back(e); } template - void start_vertex(V v, const B_G&) { + void start_vertex(V v, const B_G&) override { if (v != m_roots) throw found_goals(); } diff --git a/include/visitors/dijkstra_visitors.hpp b/include/visitors/dijkstra_visitors.hpp index 0f9f5faa09..7367ad95fb 100644 --- a/include/visitors/dijkstra_visitors.hpp +++ b/include/visitors/dijkstra_visitors.hpp @@ -90,7 +90,7 @@ class dijkstra_many_goal_visitor : public boost::default_dijkstra_visitor { m_found_goals(f_goals) { } template - void examine_vertex(V u, B_G &) { + void examine_vertex(V u, B_G &) override { auto s_it = m_goals.find(u); /* examined vertex is not a goal */ @@ -125,7 +125,7 @@ class dijkstra_distance_visitor : public boost::default_dijkstra_visitor { pgassert(m_distance_goal > 0); } template - void examine_vertex(V u, B_G &) { + void examine_vertex(V u, B_G &) override { if (m_dist[u] > m_distance_goal) { throw found_goals(); } @@ -155,7 +155,7 @@ class dijkstra_distance_visitor_no_init : public boost::default_dijkstra_visitor } template - void examine_vertex(V u, B_G &) { + void examine_vertex(V u, B_G &) override { if ( 0 == m_num_examined++) m_root = u; if (m_dist[u] > m_distance_goal) { throw found_goals(); @@ -166,7 +166,7 @@ class dijkstra_distance_visitor_no_init : public boost::default_dijkstra_visitor } template - void examine_edge(E e, B_G &g) { + void examine_edge(E e, B_G &g) override { if (source(e, g) != m_root && m_predecessors[source(e, g)] == source(e, g)) { m_color[target(e, g)] = boost::black_color; } @@ -174,14 +174,14 @@ class dijkstra_distance_visitor_no_init : public boost::default_dijkstra_visitor template - void edge_not_relaxed(E e, B_G &g) { + void edge_not_relaxed(E e, B_G &g) override { if (source(e, g) != m_root && m_predecessors[source(e, g)] == source(e, g)) { m_color[target(e, g)] = boost::black_color; } } template - void discover_vertex(V u, B_G &) { + void discover_vertex(V u, B_G &) override { if (u != m_root && m_predecessors[u] == u) { m_color[u] = boost::black_color; } diff --git a/include/visitors/edges_order_bfs_visitor.hpp b/include/visitors/edges_order_bfs_visitor.hpp index 05fe845be2..feecd6bb39 100644 --- a/include/visitors/edges_order_bfs_visitor.hpp +++ b/include/visitors/edges_order_bfs_visitor.hpp @@ -44,7 +44,7 @@ class Edges_order_bfs_visitor : public boost::default_bfs_visitor { std::vector &data) : m_data(data) {} template - void tree_edge(E e, const B_G&) { + void tree_edge(E e, const B_G&) override { m_data.push_back(e); } private: diff --git a/include/visitors/edges_order_dfs_visitor.hpp b/include/visitors/edges_order_dfs_visitor.hpp index 2d442f300e..a1b721254b 100644 --- a/include/visitors/edges_order_dfs_visitor.hpp +++ b/include/visitors/edges_order_dfs_visitor.hpp @@ -45,7 +45,7 @@ class Edges_order_dfs_visitor : public boost::default_dfs_visitor { std::vector &data) : m_data(data) {} template - void tree_edge(E e, const B_G&) { + void tree_edge(E e, const B_G&) override { m_data.push_back(e); } private: diff --git a/include/visitors/prim_dijkstra_visitor.hpp b/include/visitors/prim_dijkstra_visitor.hpp index 66bc6c381e..b096d7c6e2 100644 --- a/include/visitors/prim_dijkstra_visitor.hpp +++ b/include/visitors/prim_dijkstra_visitor.hpp @@ -45,7 +45,7 @@ class Prim_dijkstra_visitor : public boost::default_dijkstra_visitor { std::vector &data) : m_data(data) {} template - void finish_vertex(V v, B_G&) { + void finish_vertex(V v, B_G&) override { m_data.push_back(v); } private: diff --git a/include/yen/turnRestrictedPath.hpp b/include/yen/turnRestrictedPath.hpp index 9cc5befdf2..0430cdfe5d 100644 --- a/include/yen/turnRestrictedPath.hpp +++ b/include/yen/turnRestrictedPath.hpp @@ -65,7 +65,7 @@ class Pgr_turnRestrictedPath : public Pgr_ksp< G > { m_restrictions(restrictions) { } - void on_insert_first_solution(const Path path) const { + void on_insert_first_solution(const Path path) const override { if (path.empty()) return; if (has_restriction(path)) return; @@ -74,7 +74,7 @@ class Pgr_turnRestrictedPath : public Pgr_ksp< G > { if (m_stop_on_first) throw found_goals(); } - void on_insert_to_heap(const Path path) const { + void on_insert_to_heap(const Path path) const override { if (path.empty()) return; if (has_restriction(path)) return; From 5d455e124c6011bb2bf77f00e8c72b2414694368 Mon Sep 17 00:00:00 2001 From: sakirr Date: Sat, 7 Feb 2026 22:24:06 +0000 Subject: [PATCH 2/2] clang-tidy: remove invalid override from Boost visitor callbacks Boost graph visitors use non-virtual template callbacks, so `override` is not valid on these member functions. Remove `override` where the base class does not declare virtual methods. Fixes #3045 --- include/dagShortestPath/dagShortestPath.hpp | 2 +- include/visitors/astar_visitors.hpp | 2 +- include/visitors/dfs_visitor.hpp | 6 +++--- include/visitors/dfs_visitor_with_root.hpp | 4 ++-- include/visitors/dijkstra_visitors.hpp | 12 ++++++------ include/visitors/edges_order_bfs_visitor.hpp | 2 +- include/visitors/edges_order_dfs_visitor.hpp | 2 +- include/visitors/prim_dijkstra_visitor.hpp | 2 +- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/include/dagShortestPath/dagShortestPath.hpp b/include/dagShortestPath/dagShortestPath.hpp index 24ebe61ccd..5b78b5ffa7 100644 --- a/include/dagShortestPath/dagShortestPath.hpp +++ b/include/dagShortestPath/dagShortestPath.hpp @@ -197,7 +197,7 @@ class Pgr_dag { m_goals(goals), m_n_goals(n_goals) {} template - void examine_vertex(V u, B_G &) override { + void examine_vertex(V u, B_G &) { auto s_it = m_goals.find(u); if (s_it == m_goals.end()) return; diff --git a/include/visitors/astar_visitors.hpp b/include/visitors/astar_visitors.hpp index c004bbd32f..fd26a969f9 100644 --- a/include/visitors/astar_visitors.hpp +++ b/include/visitors/astar_visitors.hpp @@ -43,7 +43,7 @@ class astar_many_goals_visitor : public boost::default_astar_visitor { explicit astar_many_goals_visitor(const std::set &goals) :m_goals(goals) {} template - void examine_vertex(V u, B_G &g) override { + void examine_vertex(V u, B_G &g) { auto s_it = m_goals.find(u); if (s_it == m_goals.end()) return; // found one more goal diff --git a/include/visitors/dfs_visitor.hpp b/include/visitors/dfs_visitor.hpp index 696f536788..73064185c7 100644 --- a/include/visitors/dfs_visitor.hpp +++ b/include/visitors/dfs_visitor.hpp @@ -59,13 +59,13 @@ class Dfs_visitor : public boost::default_dfs_visitor { m_depth.resize(m_graph.num_vertices(), 0); } template - void start_vertex(V v, const B_G&) override { + void start_vertex(V v, const B_G&) { // exception for visitor termination if (v != m_roots) throw found_goals(); m_depth[v] = 0; } template - void examine_edge(E e, const B_G&) override { + void examine_edge(E e, const B_G&) { auto source = m_graph.source(e), target = m_graph.target(e); // If the target has not been visited before if (m_depth[target] == 0 && target != m_roots) { @@ -79,7 +79,7 @@ class Dfs_visitor : public boost::default_dfs_visitor { } } template - void tree_edge(E e, const B_G&) override { + void tree_edge(E e, const B_G&) { m_data.push_back(e); } diff --git a/include/visitors/dfs_visitor_with_root.hpp b/include/visitors/dfs_visitor_with_root.hpp index 73c07b823d..0cf80818e8 100644 --- a/include/visitors/dfs_visitor_with_root.hpp +++ b/include/visitors/dfs_visitor_with_root.hpp @@ -47,11 +47,11 @@ class Dfs_visitor_with_root : public boost::default_dfs_visitor { m_data(data), m_roots(root) {} template - void tree_edge(E e, const B_G&) override { + void tree_edge(E e, const B_G&) { m_data.push_back(e); } template - void start_vertex(V v, const B_G&) override { + void start_vertex(V v, const B_G&) { if (v != m_roots) throw found_goals(); } diff --git a/include/visitors/dijkstra_visitors.hpp b/include/visitors/dijkstra_visitors.hpp index 7367ad95fb..0f9f5faa09 100644 --- a/include/visitors/dijkstra_visitors.hpp +++ b/include/visitors/dijkstra_visitors.hpp @@ -90,7 +90,7 @@ class dijkstra_many_goal_visitor : public boost::default_dijkstra_visitor { m_found_goals(f_goals) { } template - void examine_vertex(V u, B_G &) override { + void examine_vertex(V u, B_G &) { auto s_it = m_goals.find(u); /* examined vertex is not a goal */ @@ -125,7 +125,7 @@ class dijkstra_distance_visitor : public boost::default_dijkstra_visitor { pgassert(m_distance_goal > 0); } template - void examine_vertex(V u, B_G &) override { + void examine_vertex(V u, B_G &) { if (m_dist[u] > m_distance_goal) { throw found_goals(); } @@ -155,7 +155,7 @@ class dijkstra_distance_visitor_no_init : public boost::default_dijkstra_visitor } template - void examine_vertex(V u, B_G &) override { + void examine_vertex(V u, B_G &) { if ( 0 == m_num_examined++) m_root = u; if (m_dist[u] > m_distance_goal) { throw found_goals(); @@ -166,7 +166,7 @@ class dijkstra_distance_visitor_no_init : public boost::default_dijkstra_visitor } template - void examine_edge(E e, B_G &g) override { + void examine_edge(E e, B_G &g) { if (source(e, g) != m_root && m_predecessors[source(e, g)] == source(e, g)) { m_color[target(e, g)] = boost::black_color; } @@ -174,14 +174,14 @@ class dijkstra_distance_visitor_no_init : public boost::default_dijkstra_visitor template - void edge_not_relaxed(E e, B_G &g) override { + void edge_not_relaxed(E e, B_G &g) { if (source(e, g) != m_root && m_predecessors[source(e, g)] == source(e, g)) { m_color[target(e, g)] = boost::black_color; } } template - void discover_vertex(V u, B_G &) override { + void discover_vertex(V u, B_G &) { if (u != m_root && m_predecessors[u] == u) { m_color[u] = boost::black_color; } diff --git a/include/visitors/edges_order_bfs_visitor.hpp b/include/visitors/edges_order_bfs_visitor.hpp index feecd6bb39..05fe845be2 100644 --- a/include/visitors/edges_order_bfs_visitor.hpp +++ b/include/visitors/edges_order_bfs_visitor.hpp @@ -44,7 +44,7 @@ class Edges_order_bfs_visitor : public boost::default_bfs_visitor { std::vector &data) : m_data(data) {} template - void tree_edge(E e, const B_G&) override { + void tree_edge(E e, const B_G&) { m_data.push_back(e); } private: diff --git a/include/visitors/edges_order_dfs_visitor.hpp b/include/visitors/edges_order_dfs_visitor.hpp index a1b721254b..2d442f300e 100644 --- a/include/visitors/edges_order_dfs_visitor.hpp +++ b/include/visitors/edges_order_dfs_visitor.hpp @@ -45,7 +45,7 @@ class Edges_order_dfs_visitor : public boost::default_dfs_visitor { std::vector &data) : m_data(data) {} template - void tree_edge(E e, const B_G&) override { + void tree_edge(E e, const B_G&) { m_data.push_back(e); } private: diff --git a/include/visitors/prim_dijkstra_visitor.hpp b/include/visitors/prim_dijkstra_visitor.hpp index b096d7c6e2..66bc6c381e 100644 --- a/include/visitors/prim_dijkstra_visitor.hpp +++ b/include/visitors/prim_dijkstra_visitor.hpp @@ -45,7 +45,7 @@ class Prim_dijkstra_visitor : public boost::default_dijkstra_visitor { std::vector &data) : m_data(data) {} template - void finish_vertex(V v, B_G&) override { + void finish_vertex(V v, B_G&) { m_data.push_back(v); } private: