From 359a6157af0e69e844a3a61b8e14d452f686f083 Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Fri, 31 Jan 2025 23:31:55 +0000 Subject: [PATCH 01/14] clang-tidy: Disable `misc-use-anonymous-namespace` check The benefit of this check is questionable, so it has been disabled. See: https://clang.llvm.org/extra/clang-tidy/checks/misc/use-anonymous-namespace.html --- .clang-tidy | 1 + 1 file changed, 1 insertion(+) diff --git a/.clang-tidy b/.clang-tidy index 3ab59c7b..5699a6f2 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -11,6 +11,7 @@ misc-*, -misc-no-recursion, -misc-unconventional-assign-operator, -misc-unused-parameters, +-misc-use-anonymous-namespace, modernize-*, -modernize-avoid-c-arrays, -modernize-concat-nested-namespaces, From 00036c064856449675b54117a3437bad1cf648ca Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Fri, 31 Jan 2025 23:32:04 +0000 Subject: [PATCH 02/14] clang-tidy: Disable `performance-avoid-endl` check See: https://clang.llvm.org/extra/clang-tidy/checks/performance/avoid-endl.html --- .clang-tidy | 1 + 1 file changed, 1 insertion(+) diff --git a/.clang-tidy b/.clang-tidy index 5699a6f2..2d29f120 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -20,6 +20,7 @@ modernize-*, -modernize-use-trailing-return-type, -modernize-use-using, performance-*, +-performance-avoid-endl, -performance-noexcept-move-constructor, readability-*, -readability-braces-around-statements, From c068596ac3dae64212729267c608c4431baf1774 Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Fri, 31 Jan 2025 23:32:18 +0000 Subject: [PATCH 03/14] clang-tidy: Fix `bugprone-crtp-constructor-accessibility` check See: https://clang.llvm.org/extra/clang-tidy/checks/bugprone/empty-catch.html --- include/mp/proxy-types.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/mp/proxy-types.h b/include/mp/proxy-types.h index 6c1b1aae..40cce321 100644 --- a/include/mp/proxy-types.h +++ b/include/mp/proxy-types.h @@ -314,6 +314,9 @@ struct IterateFieldsHelper { static_cast(this)->handleField(std::forward(arg1), std::forward(arg2), ParamList()); } +private: + IterateFieldsHelper() = default; + friend Derived; }; struct IterateFields : IterateFieldsHelper From 8170d3d421da1bd3ab735b18354fce8dd4cfd7ed Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Fri, 31 Jan 2025 23:32:31 +0000 Subject: [PATCH 04/14] clang-tidy: Suppress `bugprone-empty-catch` check warning See: https://clang.llvm.org/extra/clang-tidy/checks/bugprone/empty-catch.html --- include/mp/util.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/mp/util.h b/include/mp/util.h index 032fc0f1..3966e281 100644 --- a/include/mp/util.h +++ b/include/mp/util.h @@ -157,7 +157,7 @@ struct DestructorCatcher { } ~DestructorCatcher() noexcept try { - } catch (const kj::Exception& e) { + } catch (const kj::Exception& e) { // NOLINT(bugprone-empty-catch) } }; From 4a2508c49978bbbcadd7bbff1543bdf44310c74a Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Fri, 31 Jan 2025 23:32:56 +0000 Subject: [PATCH 05/14] clang-tidy: Fix `modernize-type-traits` check See: https://clang.llvm.org/extra/clang-tidy/checks/modernize/type-traits.html --- include/mp/proxy-types.h | 30 +++++++++++++++--------------- include/mp/proxy.h | 2 +- include/mp/util.h | 8 ++++---- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/include/mp/proxy-types.h b/include/mp/proxy-types.h index 40cce321..384ecaae 100644 --- a/include/mp/proxy-types.h +++ b/include/mp/proxy-types.h @@ -39,17 +39,17 @@ struct StructField // clang-format off template auto get() const -> decltype(A::get(this->m_struct)) { return A::get(this->m_struct); } - template auto has() const -> typename std::enable_if::type { return A::getHas(m_struct); } - template auto has() const -> typename std::enable_if::type { return A::has(m_struct); } - template auto has() const -> typename std::enable_if::type { return true; } - template auto want() const -> typename std::enable_if::type { return A::getWant(m_struct); } - template auto want() const -> typename std::enable_if::type { return true; } + template auto has() const -> std::enable_if_t { return A::getHas(m_struct); } + template auto has() const -> std::enable_if_t { return A::has(m_struct); } + template auto has() const -> std::enable_if_t { return true; } + template auto want() const -> std::enable_if_t { return A::getWant(m_struct); } + template auto want() const -> std::enable_if_t { return true; } template decltype(auto) set(Args&&... args) const { return A::set(this->m_struct, std::forward(args)...); } template decltype(auto) init(Args&&... args) const { return A::init(this->m_struct, std::forward(args)...); } - template auto setHas() const -> typename std::enable_if::type { return A::setHas(m_struct); } - template auto setHas() const -> typename std::enable_if::type { } - template auto setWant() const -> typename std::enable_if::type { return A::setWant(m_struct); } - template auto setWant() const -> typename std::enable_if::type { } + template auto setHas() const -> std::enable_if_t { return A::setHas(m_struct); } + template auto setHas() const -> std::enable_if_t { } + template auto setWant() const -> std::enable_if_t { return A::setWant(m_struct); } + template auto setWant() const -> std::enable_if_t { } // clang-format on }; @@ -375,14 +375,14 @@ struct ClientParam // position when unpacking tuple might be slower than pattern matching // approach in the stack overflow solution template - auto callBuild(Args&&... args) -> typename std::enable_if<(I < sizeof...(Types))>::type + auto callBuild(Args&&... args) -> std::enable_if_t<(I < sizeof...(Types))> { callBuild(std::forward(args)..., std::get(m_client_param->m_values)); } template auto callBuild(ClientInvokeContext& invoke_context, Params& params, ParamList, Values&&... values) -> - typename std::enable_if<(I == sizeof...(Types))>::type + std::enable_if_t<(I == sizeof...(Types))> { MaybeBuildField(std::integral_constant(), ParamList(), invoke_context, Make(params), std::forward(values)...); @@ -403,14 +403,14 @@ struct ClientParam } template - auto callRead(Args&&... args) -> typename std::enable_if<(I < sizeof...(Types))>::type + auto callRead(Args&&... args) -> std::enable_if_t<(I < sizeof...(Types))> { callRead(std::forward(args)..., std::get(m_client_param->m_values)); } template auto callRead(ClientInvokeContext& invoke_context, Results& results, TypeList, Values&&... values) - -> typename std::enable_if::type + -> std::enable_if_t { MaybeReadField(std::integral_constant(), TypeList...>(), invoke_context, Make(results), ReadDestUpdate(values)...); @@ -651,7 +651,7 @@ void clientInvoke(ProxyClient& proxy_client, const GetRequest& get_request, Fiel //! duplication and branching in generic code that forwards calls to functions. template auto ReplaceVoid(Fn&& fn, Ret&& ret) -> - typename std::enable_if::value, decltype(ret())>::type + std::enable_if_t, decltype(ret())> { fn(); return ret(); @@ -660,7 +660,7 @@ auto ReplaceVoid(Fn&& fn, Ret&& ret) -> //! Overload of above for non-void `fn()` case. template auto ReplaceVoid(Fn&& fn, Ret&& ret) -> - typename std::enable_if::value, decltype(fn())>::type + std::enable_if_t, decltype(fn())> { return fn(); } diff --git a/include/mp/proxy.h b/include/mp/proxy.h index 92c0fa56..76be0992 100644 --- a/include/mp/proxy.h +++ b/include/mp/proxy.h @@ -198,7 +198,7 @@ struct FunctionTraits<_Result (_Class::*const)(_Params...)> template using Param = typename std::tuple_element>::type; using Fields = - typename std::conditional::value, Params, TypeList<_Params..., _Result>>::type; + std::conditional_t, Params, TypeList<_Params..., _Result>>; }; //! Traits class for a proxy method, providing the same diff --git a/include/mp/util.h b/include/mp/util.h index 3966e281..6ed631e1 100644 --- a/include/mp/util.h +++ b/include/mp/util.h @@ -43,9 +43,9 @@ struct TypeList //! Example: //! Make(5, true) // Constructs std::pair(5, true); template