From 6083f8adbb38b3df9d61965df1795cb3b3634b62 Mon Sep 17 00:00:00 2001 From: "Ralf W. Grosse-Kunstleve" Date: Thu, 21 Sep 2023 22:04:59 -0700 Subject: [PATCH] Resolve helpful clang-tidy errors. ``` /usr/bin/cmake -E __run_co_compile --tidy="/usr/bin/clang-tidy;--use-color;--warnings-as-errors=*;--extra-arg-before=--driver-mode=g++" --source=/__w/pybind11/pybind11/tests/test_class.cpp -- /usr/bin/c++ -DPYBIND11_ENABLE_TYPE_CASTER_ODR_GUARD_IF_AVAILABLE -DPYBIND11_TEST_EIGEN -Dpybind11_tests_EXPORTS -I/__w/pybind11/pybind11/include -isystem /usr/include/python3.9 -isystem /__w/pybind11/pybind11/build/_deps/eigen-src -Os -DNDEBUG -fPIC -fvisibility=hidden -Wall -Wextra -Wconversion -Wcast-qual -Wdeprecated -Wundef -Wnon-virtual-dtor -flto=thin -std=c++17 -o CMakeFiles/pybind11_tests.dir/test_class.cpp.o -c /__w/pybind11/pybind11/tests/test_class.cpp /__w/pybind11/pybind11/include/pybind11/detail/smart_holder_poc.h:114:5: error: single-argument constructors must be marked explicit to avoid unintentional implicit conversions [google-explicit-constructor,-warnings-as-errors] custom_deleter(D &&deleter) : deleter{std::move(deleter)} {} ^ explicit /__w/pybind11/pybind11/include/pybind11/detail/smart_holder_poc.h:120:76: error: forwarding reference passed to std::move(), which may unexpectedly cause lvalues to be moved; use std::forward() instead [bugprone-move-forwarding-reference,-warnings-as-errors] return guarded_delete(std::function(custom_deleter(std::move(uqp_del))), ^~~~~~~~~ std::forward ``` --- include/pybind11/detail/smart_holder_poc.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/pybind11/detail/smart_holder_poc.h b/include/pybind11/detail/smart_holder_poc.h index ed6f322b4..65b058161 100644 --- a/include/pybind11/detail/smart_holder_poc.h +++ b/include/pybind11/detail/smart_holder_poc.h @@ -111,14 +111,14 @@ guarded_delete make_guarded_builtin_delete(bool armed_flag) { template struct custom_deleter { D deleter; - custom_deleter(D &&deleter) : deleter{std::move(deleter)} {} + explicit custom_deleter(D &&deleter) : deleter{std::move(deleter)} {} void operator()(void *raw_ptr) { deleter(static_cast(raw_ptr)); } }; template guarded_delete make_guarded_custom_deleter(D &&uqp_del, bool armed_flag) { - return guarded_delete(std::function(custom_deleter(std::move(uqp_del))), - armed_flag); + return guarded_delete( + std::function(custom_deleter(std::forward(uqp_del))), armed_flag); } template