diff --git a/include/dwarfs/conv.h b/include/dwarfs/conv.h index df0501ba..5c8467d6 100644 --- a/include/dwarfs/conv.h +++ b/include/dwarfs/conv.h @@ -58,7 +58,7 @@ template std::optional try_to(U&& s) requires(std::same_as && std::is_arithmetic_v) { - return s != U{}; + return std::forward(s) != U{}; } template diff --git a/include/dwarfs/writer/contextual_option.h b/include/dwarfs/writer/contextual_option.h index bf36215a..cbccf85c 100644 --- a/include/dwarfs/writer/contextual_option.h +++ b/include/dwarfs/writer/contextual_option.h @@ -92,7 +92,7 @@ class contextual_option { template bool any_is(T&& pred) const { for (auto e : contextual_) { - if (pred(e.second)) { + if (std::forward(pred)(e.second)) { return true; } } @@ -102,7 +102,7 @@ class contextual_option { template void visit_contextual(T&& visitor) const { for (auto const& [ctx, val] : contextual_) { - visitor(ctx, val); + std::forward(visitor)(ctx, val); } } diff --git a/include/dwarfs/writer/internal/sortable_span.h b/include/dwarfs/writer/internal/sortable_span.h index 73adf346..544cc135 100644 --- a/include/dwarfs/writer/internal/sortable_span.h +++ b/include/dwarfs/writer/internal/sortable_span.h @@ -80,7 +80,7 @@ class sortable_span { : values_{values} {} template - void select(P&& predicate) { + void select(P const& predicate) { index_.reserve(values_.size()); for (size_t i = 0; i < values_.size(); ++i) { if (predicate(values_[i])) { diff --git a/src/reader/internal/metadata_v2.cpp b/src/reader/internal/metadata_v2.cpp index 1d00376d..ccc70580 100644 --- a/src/reader/internal/metadata_v2.cpp +++ b/src/reader/internal/metadata_v2.cpp @@ -324,7 +324,8 @@ void analyze_frozen(std::ostream& os, template void parse_metadata_options( - MappedFrozen const& meta, Function&& func) { + MappedFrozen const& meta, + Function const& func) { if (auto opt = meta.options()) { func("mtime_only", opt->mtime_only()); func("packed_chunk_table", opt->packed_chunk_table()); @@ -765,7 +766,7 @@ class metadata_ final : public metadata_v2::impl { template void walk(uint32_t self_index, uint32_t parent_index, set_type& seen, - T&& func) const; + T const& func) const; template void walk_tree(T&& func) const { @@ -1557,7 +1558,7 @@ std::string metadata_::serialize_as_json(bool simple) const { template template void metadata_::walk(uint32_t self_index, uint32_t parent_index, - set_type& seen, T&& func) const { + set_type& seen, T const& func) const { func(self_index, parent_index); auto entry = make_dir_entry_view_impl(self_index, parent_index); diff --git a/src/writer/internal/file_scanner.cpp b/src/writer/internal/file_scanner.cpp index ee93f0a0..fd49f6f7 100644 --- a/src/writer/internal/file_scanner.cpp +++ b/src/writer/internal/file_scanner.cpp @@ -77,7 +77,7 @@ class file_scanner_ final : public file_scanner::impl { void add_inode(file* p, int lineno); template - void finalize_hardlinks(Lookup&& lookup); + void finalize_hardlinks(Lookup const& lookup); template void finalize_files(folly::F14FastMap& fmap, @@ -444,7 +444,7 @@ void file_scanner_::add_inode(file* p, int lineno) { template template -void file_scanner_::finalize_hardlinks(Lookup&& lookup) { +void file_scanner_::finalize_hardlinks(Lookup const& lookup) { auto tv = LOG_TIMED_VERBOSE; for (auto& kv : hardlinks_) { diff --git a/src/writer/internal/inode_manager.cpp b/src/writer/internal/inode_manager.cpp index 72867a51..56654ce2 100644 --- a/src/writer/internal/inode_manager.cpp +++ b/src/writer/internal/inode_manager.cpp @@ -384,7 +384,7 @@ class inode_ : public inode { void scan_range(mmif* mm, scanner_progress* sprog, size_t offset, size_t size, size_t chunk_size, T&& scanner) { while (size >= chunk_size) { - scanner(mm->span(offset, chunk_size)); + std::forward(scanner)(mm->span(offset, chunk_size)); mm->release_until(offset); offset += chunk_size; size -= chunk_size; diff --git a/src/writer/internal/similarity_ordering.cpp b/src/writer/internal/similarity_ordering.cpp index 4d9adf2b..a4759228 100644 --- a/src/writer/internal/similarity_ordering.cpp +++ b/src/writer/internal/similarity_ordering.cpp @@ -95,8 +95,8 @@ int distance(std::array const& a, std::array const& b) } template -void order_by_shortest_path(size_t count, GetI&& geti, GetK&& getk, - Swap&& swapper) { +void order_by_shortest_path(size_t count, GetI const& geti, GetK const& getk, + Swap const& swapper) { for (size_t i = 0; i < count - 1; ++i) { auto bi = geti(i); int best_distance = std::numeric_limits::max(); diff --git a/src/writer/segmenter.cpp b/src/writer/segmenter.cpp index 2df0b1b8..cfc5769c 100644 --- a/src/writer/segmenter.cpp +++ b/src/writer/segmenter.cpp @@ -115,7 +115,8 @@ class fast_multimap { } template - DWARFS_FORCE_INLINE void for_each_value(KeyT const& key, F&& func) const { + DWARFS_FORCE_INLINE void + for_each_value(KeyT const& key, F const& func) const { if (auto it = values_.find(key); it != values_.end()) [[unlikely]] { func(it->second); if (auto it2 = collisions_.find(key); it2 != collisions_.end()) @@ -128,7 +129,7 @@ class fast_multimap { } template - DWARFS_FORCE_INLINE bool any_value_is(KeyT const& key, F&& func) const { + DWARFS_FORCE_INLINE bool any_value_is(KeyT const& key, F const& func) const { if (auto it = values_.find(key); it != values_.end()) [[unlikely]] { if (func(it->second)) { return true; @@ -347,7 +348,7 @@ class ConstantGranularityPolicy : private GranularityPolicyBase { } template - static DWARFS_FORCE_INLINE void for_bytes_in_frame(T&& func) { + static DWARFS_FORCE_INLINE void for_bytes_in_frame(T const& func) { for (size_t i = 0; i < kGranularity; ++i) { func(); } @@ -415,7 +416,7 @@ class VariableGranularityPolicy : private GranularityPolicyBase { } template - DWARFS_FORCE_INLINE void for_bytes_in_frame(T&& func) const { + DWARFS_FORCE_INLINE void for_bytes_in_frame(T const& func) const { for (size_t i = 0; i < granularity_; ++i) { func(); }