Skip to content

Commit 69c5771

Browse files
committed
Use std::forward when calling functions
Use std::forward when calling functions that have been universal reference parameters. https://clang.llvm.org/extra/clang-tidy/checks/cppcoreguidelines/missing-std-forward.html
1 parent 678dcdd commit 69c5771

File tree

6 files changed

+62
-60
lines changed

6 files changed

+62
-60
lines changed

include/osmium/area/detail/segment_list.hpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ DEALINGS IN THE SOFTWARE.
5050
#include <iterator>
5151
#include <numeric>
5252
#include <unordered_set>
53+
#include <utility>
5354
#include <vector>
5455

5556
namespace osmium {
@@ -64,13 +65,13 @@ namespace osmium {
6465
* way as parameter. This takes into account that there might be
6566
* non-way members in the relation.
6667
*/
67-
template <typename F>
68-
inline void for_each_member(const osmium::Relation& relation, const std::vector<const osmium::Way*>& ways, F&& func) {
68+
template <typename TFunc>
69+
inline void for_each_member(const osmium::Relation& relation, const std::vector<const osmium::Way*>& ways, TFunc&& func) {
6970
auto way_it = ways.cbegin();
7071
for (const osmium::RelationMember& member : relation.members()) {
7172
if (member.type() == osmium::item_type::way) {
7273
assert(way_it != ways.cend());
73-
func(member, **way_it);
74+
std::forward<TFunc>(func)(member, **way_it);
7475
++way_it;
7576
}
7677
}

include/osmium/index/relations_map.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,12 +233,12 @@ namespace osmium {
233233
if (m_small) {
234234
const auto parents = m_map32.get(id);
235235
for (auto it = parents.first; it != parents.second; ++it) {
236-
func(it->value);
236+
std::forward<TFunc>(func)(it->value);
237237
}
238238
} else {
239239
const auto parents = m_map64.get(id);
240240
for (auto it = parents.first; it != parents.second; ++it) {
241-
func(it->value);
241+
std::forward<TFunc>(func)(it->value);
242242
}
243243
}
244244
}

include/osmium/io/detail/xml_input_format.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ namespace osmium {
179179
return;
180180
}
181181
try {
182-
func(xml_parser);
182+
std::forward<TFunc>(func)(xml_parser);
183183
} catch (...) {
184184
m_exception_ptr = std::current_exception();
185185
XML_StopParser(m_parser, 0);
@@ -267,10 +267,10 @@ namespace osmium {
267267

268268
ExpatXMLParser* m_expat_xml_parser{nullptr};
269269

270-
template <typename T>
271-
static void check_attributes(const XML_Char** attrs, T&& check) {
270+
template <typename TFunc>
271+
static void check_attributes(const XML_Char** attrs, TFunc&& check) {
272272
while (*attrs) {
273-
check(attrs[0], attrs[1]);
273+
std::forward<TFunc>(check)(attrs[0], attrs[1]);
274274
attrs += 2;
275275
}
276276
}

include/osmium/relations/members_database.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ DEALINGS IN THE SOFTWARE.
4646
#include <limits>
4747
#include <tuple>
4848
#include <type_traits>
49+
#include <utility>
4950
#include <vector>
5051

5152
namespace osmium {
@@ -384,7 +385,7 @@ namespace osmium {
384385
rel_handle.decrement_members();
385386

386387
if (rel_handle.has_all_members()) {
387-
func(rel_handle);
388+
std::forward<TFunc>(func)(rel_handle);
388389
}
389390
}
390391

include/osmium/relations/relations_database.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ namespace osmium {
323323
void RelationsDatabase::for_each_relation(TFunc&& func) {
324324
for (std::size_t pos = 0; pos < m_elements.size(); ++pos) {
325325
if (m_elements[pos].handle.valid()) {
326-
func(RelationHandle{this, pos});
326+
std::forward<TFunc>(func)(RelationHandle{this, pos});
327327
}
328328
}
329329
}

include/osmium/visitor.hpp

Lines changed: 49 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -57,42 +57,42 @@ namespace osmium {
5757
case osmium::item_type::undefined:
5858
break;
5959
case osmium::item_type::node:
60-
handler.osm_object(static_cast<ConstIfConst<TItem, osmium::OSMObject>&>(item));
61-
handler.node(static_cast<ConstIfConst<TItem, osmium::Node>&>(item));
60+
std::forward<THandler>(handler).osm_object(static_cast<ConstIfConst<TItem, osmium::OSMObject>&>(item));
61+
std::forward<THandler>(handler).node(static_cast<ConstIfConst<TItem, osmium::Node>&>(item));
6262
break;
6363
case osmium::item_type::way:
64-
handler.osm_object(static_cast<ConstIfConst<TItem, osmium::OSMObject>&>(item));
65-
handler.way(static_cast<ConstIfConst<TItem, osmium::Way>&>(item));
64+
std::forward<THandler>(handler).osm_object(static_cast<ConstIfConst<TItem, osmium::OSMObject>&>(item));
65+
std::forward<THandler>(handler).way(static_cast<ConstIfConst<TItem, osmium::Way>&>(item));
6666
break;
6767
case osmium::item_type::relation:
68-
handler.osm_object(static_cast<ConstIfConst<TItem, osmium::OSMObject>&>(item));
69-
handler.relation(static_cast<ConstIfConst<TItem, osmium::Relation>&>(item));
68+
std::forward<THandler>(handler).osm_object(static_cast<ConstIfConst<TItem, osmium::OSMObject>&>(item));
69+
std::forward<THandler>(handler).relation(static_cast<ConstIfConst<TItem, osmium::Relation>&>(item));
7070
break;
7171
case osmium::item_type::area:
72-
handler.osm_object(static_cast<ConstIfConst<TItem, osmium::OSMObject>&>(item));
73-
handler.area(static_cast<ConstIfConst<TItem, osmium::Area>&>(item));
72+
std::forward<THandler>(handler).osm_object(static_cast<ConstIfConst<TItem, osmium::OSMObject>&>(item));
73+
std::forward<THandler>(handler).area(static_cast<ConstIfConst<TItem, osmium::Area>&>(item));
7474
break;
7575
case osmium::item_type::changeset:
76-
handler.changeset(static_cast<ConstIfConst<TItem, osmium::Changeset>&>(item));
76+
std::forward<THandler>(handler).changeset(static_cast<ConstIfConst<TItem, osmium::Changeset>&>(item));
7777
break;
7878
case osmium::item_type::tag_list:
79-
handler.tag_list(static_cast<ConstIfConst<TItem, osmium::TagList>&>(item));
79+
std::forward<THandler>(handler).tag_list(static_cast<ConstIfConst<TItem, osmium::TagList>&>(item));
8080
break;
8181
case osmium::item_type::way_node_list:
82-
handler.way_node_list(static_cast<ConstIfConst<TItem, osmium::WayNodeList>&>(item));
82+
std::forward<THandler>(handler).way_node_list(static_cast<ConstIfConst<TItem, osmium::WayNodeList>&>(item));
8383
break;
8484
case osmium::item_type::relation_member_list:
8585
case osmium::item_type::relation_member_list_with_full_members:
86-
handler.relation_member_list(static_cast<ConstIfConst<TItem, osmium::RelationMemberList>&>(item));
86+
std::forward<THandler>(handler).relation_member_list(static_cast<ConstIfConst<TItem, osmium::RelationMemberList>&>(item));
8787
break;
8888
case osmium::item_type::outer_ring:
89-
handler.outer_ring(static_cast<ConstIfConst<TItem, osmium::OuterRing>&>(item));
89+
std::forward<THandler>(handler).outer_ring(static_cast<ConstIfConst<TItem, osmium::OuterRing>&>(item));
9090
break;
9191
case osmium::item_type::inner_ring:
92-
handler.inner_ring(static_cast<ConstIfConst<TItem, osmium::InnerRing>&>(item));
92+
std::forward<THandler>(handler).inner_ring(static_cast<ConstIfConst<TItem, osmium::InnerRing>&>(item));
9393
break;
9494
case osmium::item_type::changeset_discussion:
95-
handler.changeset_discussion(static_cast<ConstIfConst<TItem, osmium::ChangesetDiscussion>&>(item));
95+
std::forward<THandler>(handler).changeset_discussion(static_cast<ConstIfConst<TItem, osmium::ChangesetDiscussion>&>(item));
9696
break;
9797
}
9898
}
@@ -101,23 +101,23 @@ namespace osmium {
101101
inline void apply_item_impl(const osmium::OSMEntity& item, THandler&& handler) {
102102
switch (item.type()) {
103103
case osmium::item_type::node:
104-
handler.osm_object(static_cast<const osmium::OSMObject&>(item));
105-
handler.node(static_cast<const osmium::Node&>(item));
104+
std::forward<THandler>(handler).osm_object(static_cast<const osmium::OSMObject&>(item));
105+
std::forward<THandler>(handler).node(static_cast<const osmium::Node&>(item));
106106
break;
107107
case osmium::item_type::way:
108-
handler.osm_object(static_cast<const osmium::OSMObject&>(item));
109-
handler.way(static_cast<const osmium::Way&>(item));
108+
std::forward<THandler>(handler).osm_object(static_cast<const osmium::OSMObject&>(item));
109+
std::forward<THandler>(handler).way(static_cast<const osmium::Way&>(item));
110110
break;
111111
case osmium::item_type::relation:
112-
handler.osm_object(static_cast<const osmium::OSMObject&>(item));
113-
handler.relation(static_cast<const osmium::Relation&>(item));
112+
std::forward<THandler>(handler).osm_object(static_cast<const osmium::OSMObject&>(item));
113+
std::forward<THandler>(handler).relation(static_cast<const osmium::Relation&>(item));
114114
break;
115115
case osmium::item_type::area:
116-
handler.osm_object(static_cast<const osmium::OSMObject&>(item));
117-
handler.area(static_cast<const osmium::Area&>(item));
116+
std::forward<THandler>(handler).osm_object(static_cast<const osmium::OSMObject&>(item));
117+
std::forward<THandler>(handler).area(static_cast<const osmium::Area&>(item));
118118
break;
119119
case osmium::item_type::changeset:
120-
handler.changeset(static_cast<const osmium::Changeset&>(item));
120+
std::forward<THandler>(handler).changeset(static_cast<const osmium::Changeset&>(item));
121121
break;
122122
default:
123123
throw osmium::unknown_type{};
@@ -128,23 +128,23 @@ namespace osmium {
128128
inline void apply_item_impl(osmium::OSMEntity& item, THandler&& handler) {
129129
switch (item.type()) {
130130
case osmium::item_type::node:
131-
handler.osm_object(static_cast<osmium::OSMObject&>(item));
132-
handler.node(static_cast<osmium::Node&>(item));
131+
std::forward<THandler>(handler).osm_object(static_cast<osmium::OSMObject&>(item));
132+
std::forward<THandler>(handler).node(static_cast<osmium::Node&>(item));
133133
break;
134134
case osmium::item_type::way:
135-
handler.osm_object(static_cast<osmium::OSMObject&>(item));
136-
handler.way(static_cast<osmium::Way&>(item));
135+
std::forward<THandler>(handler).osm_object(static_cast<osmium::OSMObject&>(item));
136+
std::forward<THandler>(handler).way(static_cast<osmium::Way&>(item));
137137
break;
138138
case osmium::item_type::relation:
139-
handler.osm_object(static_cast<osmium::OSMObject&>(item));
140-
handler.relation(static_cast<osmium::Relation&>(item));
139+
std::forward<THandler>(handler).osm_object(static_cast<osmium::OSMObject&>(item));
140+
std::forward<THandler>(handler).relation(static_cast<osmium::Relation&>(item));
141141
break;
142142
case osmium::item_type::area:
143-
handler.osm_object(static_cast<osmium::OSMObject&>(item));
144-
handler.area(static_cast<osmium::Area&>(item));
143+
std::forward<THandler>(handler).osm_object(static_cast<osmium::OSMObject&>(item));
144+
std::forward<THandler>(handler).area(static_cast<osmium::Area&>(item));
145145
break;
146146
case osmium::item_type::changeset:
147-
handler.changeset(static_cast<osmium::Changeset&>(item));
147+
std::forward<THandler>(handler).changeset(static_cast<osmium::Changeset&>(item));
148148
break;
149149
default:
150150
throw osmium::unknown_type{};
@@ -155,20 +155,20 @@ namespace osmium {
155155
inline void apply_item_impl(const osmium::OSMObject& item, THandler&& handler) {
156156
switch (item.type()) {
157157
case osmium::item_type::node:
158-
handler.osm_object(item);
159-
handler.node(static_cast<const osmium::Node&>(item));
158+
std::forward<THandler>(handler).osm_object(item);
159+
std::forward<THandler>(handler).node(static_cast<const osmium::Node&>(item));
160160
break;
161161
case osmium::item_type::way:
162-
handler.osm_object(item);
163-
handler.way(static_cast<const osmium::Way&>(item));
162+
std::forward<THandler>(handler).osm_object(item);
163+
std::forward<THandler>(handler).way(static_cast<const osmium::Way&>(item));
164164
break;
165165
case osmium::item_type::relation:
166-
handler.osm_object(item);
167-
handler.relation(static_cast<const osmium::Relation&>(item));
166+
std::forward<THandler>(handler).osm_object(item);
167+
std::forward<THandler>(handler).relation(static_cast<const osmium::Relation&>(item));
168168
break;
169169
case osmium::item_type::area:
170-
handler.osm_object(item);
171-
handler.area(static_cast<const osmium::Area&>(item));
170+
std::forward<THandler>(handler).osm_object(item);
171+
std::forward<THandler>(handler).area(static_cast<const osmium::Area&>(item));
172172
break;
173173
default:
174174
throw osmium::unknown_type{};
@@ -179,20 +179,20 @@ namespace osmium {
179179
inline void apply_item_impl(osmium::OSMObject& item, THandler&& handler) {
180180
switch (item.type()) {
181181
case osmium::item_type::node:
182-
handler.osm_object(item);
183-
handler.node(static_cast<osmium::Node&>(item));
182+
std::forward<THandler>(handler).osm_object(item);
183+
std::forward<THandler>(handler).node(static_cast<osmium::Node&>(item));
184184
break;
185185
case osmium::item_type::way:
186-
handler.osm_object(item);
187-
handler.way(static_cast<osmium::Way&>(item));
186+
std::forward<THandler>(handler).osm_object(item);
187+
std::forward<THandler>(handler).way(static_cast<osmium::Way&>(item));
188188
break;
189189
case osmium::item_type::relation:
190-
handler.osm_object(item);
191-
handler.relation(static_cast<osmium::Relation&>(item));
190+
std::forward<THandler>(handler).osm_object(item);
191+
std::forward<THandler>(handler).relation(static_cast<osmium::Relation&>(item));
192192
break;
193193
case osmium::item_type::area:
194-
handler.osm_object(item);
195-
handler.area(static_cast<osmium::Area&>(item));
194+
std::forward<THandler>(handler).osm_object(item);
195+
std::forward<THandler>(handler).area(static_cast<osmium::Area&>(item));
196196
break;
197197
default:
198198
throw osmium::unknown_type{};

0 commit comments

Comments
 (0)