From 86d08eb9e5912c828b1efe58892814420e186139 Mon Sep 17 00:00:00 2001 From: Thomas Padioleau Date: Wed, 16 Oct 2024 10:03:26 +0200 Subject: [PATCH] Add google-explicit-constructor check (#662) --- .clang-tidy | 1 - include/ddc/chunk_span.hpp | 6 +++--- include/ddc/detail/tagged_vector.hpp | 6 ++++-- include/ddc/discrete_domain.hpp | 4 ++-- include/ddc/discrete_element.hpp | 4 ++-- include/ddc/discrete_vector.hpp | 6 ++++-- include/ddc/experimental/single_discretization.hpp | 2 +- include/ddc/kernels/splines/bsplines_non_uniform.hpp | 2 +- include/ddc/non_uniform_point_sampling.hpp | 2 +- tests/splines/cosine_evaluator.hpp | 4 ++-- tests/splines/polynomial_evaluator.hpp | 3 ++- tests/splines/spline_error_bounds.hpp | 2 +- 12 files changed, 23 insertions(+), 19 deletions(-) diff --git a/.clang-tidy b/.clang-tidy index e17ce7814..720a86db1 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -30,7 +30,6 @@ cppcoreguidelines-*, -cppcoreguidelines-pro-type-reinterpret-cast, -cppcoreguidelines-rvalue-reference-param-not-moved, google-*, --google-explicit-constructor, -google-readability-casting, -google-readability-todo, -google-runtime-int, diff --git a/include/ddc/chunk_span.hpp b/include/ddc/chunk_span.hpp index 7d96d9a7a..34ca85c10 100644 --- a/include/ddc/chunk_span.hpp +++ b/include/ddc/chunk_span.hpp @@ -158,7 +158,7 @@ class ChunkSpan, LayoutStridedPolicy, Memo class OElementType, class Allocator, class = std::enable_if_t>> - KOKKOS_FUNCTION constexpr ChunkSpan( + KOKKOS_FUNCTION constexpr explicit ChunkSpan( Chunk& other) noexcept : base_type(other.m_internal_mdspan, other.m_domain) { @@ -174,7 +174,7 @@ class ChunkSpan, LayoutStridedPolicy, Memo class = std::enable_if_t>, class Allocator, class = std::enable_if_t>> - KOKKOS_FUNCTION constexpr ChunkSpan( + KOKKOS_FUNCTION constexpr explicit ChunkSpan( Chunk const& other) noexcept : base_type(other.m_internal_mdspan, other.m_domain) { @@ -184,7 +184,7 @@ class ChunkSpan, LayoutStridedPolicy, Memo * @param other the ChunkSpan to move */ template - KOKKOS_FUNCTION constexpr ChunkSpan( + KOKKOS_FUNCTION constexpr explicit ChunkSpan( ChunkSpan const& other) noexcept : base_type(other.m_internal_mdspan, other.m_domain) diff --git a/include/ddc/detail/tagged_vector.hpp b/include/ddc/detail/tagged_vector.hpp index c2080ae30..303b126a1 100644 --- a/include/ddc/detail/tagged_vector.hpp +++ b/include/ddc/detail/tagged_vector.hpp @@ -232,6 +232,7 @@ template class TaggedVectorConversionOperators> { public: + // NOLINTBEGIN(google-explicit-constructor) KOKKOS_FUNCTION constexpr operator ElementType const&() const noexcept { return static_cast const*>(this)->m_values[0]; @@ -241,6 +242,7 @@ class TaggedVectorConversionOperators> { return static_cast*>(this)->m_values[0]; } + // NOLINTEND(google-explicit-constructor) }; template @@ -269,7 +271,7 @@ class TaggedVector : public TaggedVectorConversionOperators && ...)>> - explicit KOKKOS_FUNCTION constexpr TaggedVector(TVectors const&... delems) noexcept + KOKKOS_FUNCTION constexpr explicit TaggedVector(TVectors const&... delems) noexcept : m_values {static_cast(take(delems...).template get())...} { } @@ -279,7 +281,7 @@ class TaggedVector : public TaggedVectorConversionOperators && ...)>, class = std::enable_if_t<(std::is_convertible_v && ...)>, class = std::enable_if_t> - explicit KOKKOS_FUNCTION constexpr TaggedVector(Params const&... params) noexcept + KOKKOS_FUNCTION constexpr explicit TaggedVector(Params const&... params) noexcept : m_values {static_cast(params)...} { } diff --git a/include/ddc/discrete_domain.hpp b/include/ddc/discrete_domain.hpp index c93326542..5d0a65270 100644 --- a/include/ddc/discrete_domain.hpp +++ b/include/ddc/discrete_domain.hpp @@ -74,7 +74,7 @@ class DiscreteDomain /// Construct a DiscreteDomain by copies and merge of domains template && ...)>> - explicit KOKKOS_FUNCTION constexpr DiscreteDomain(DDoms const&... domains) + KOKKOS_FUNCTION constexpr explicit DiscreteDomain(DDoms const&... domains) : m_element_begin(domains.front()...) , m_element_end((domains.front() + domains.extents())...) { @@ -264,7 +264,7 @@ class DiscreteDomain<> // Construct a DiscreteDomain from a reordered copy of `domain` template - explicit KOKKOS_FUNCTION constexpr DiscreteDomain( + KOKKOS_FUNCTION constexpr explicit DiscreteDomain( [[maybe_unused]] DiscreteDomain const& domain) { } diff --git a/include/ddc/discrete_element.hpp b/include/ddc/discrete_element.hpp index df913fe8a..17d89ddb5 100644 --- a/include/ddc/discrete_element.hpp +++ b/include/ddc/discrete_element.hpp @@ -174,7 +174,7 @@ class DiscreteElement KOKKOS_DEFAULTED_FUNCTION constexpr DiscreteElement(DiscreteElement&&) = default; template && ...)>> - explicit KOKKOS_FUNCTION constexpr DiscreteElement(DElems const&... delems) noexcept + KOKKOS_FUNCTION constexpr explicit DiscreteElement(DElems const&... delems) noexcept : m_values {take(delems...).template uid()...} { } @@ -184,7 +184,7 @@ class DiscreteElement class = std::enable_if_t<(!is_discrete_element_v && ...)>, class = std::enable_if_t<(std::is_integral_v && ...)>, class = std::enable_if_t> - explicit KOKKOS_FUNCTION constexpr DiscreteElement(Params const&... params) noexcept + KOKKOS_FUNCTION constexpr explicit DiscreteElement(Params const&... params) noexcept : m_values {static_cast(params)...} { } diff --git a/include/ddc/discrete_vector.hpp b/include/ddc/discrete_vector.hpp index 24cb41afb..4831d521f 100644 --- a/include/ddc/discrete_vector.hpp +++ b/include/ddc/discrete_vector.hpp @@ -217,6 +217,7 @@ template class DiscreteVectorConversionOperators> { public: + // NOLINTBEGIN(google-explicit-constructor) KOKKOS_FUNCTION constexpr operator DiscreteVectorElement const&() const noexcept { return static_cast const*>(this)->m_values[0]; @@ -226,6 +227,7 @@ class DiscreteVectorConversionOperators> { return static_cast*>(this)->m_values[0]; } + // NOLINTEND(google-explicit-constructor) }; /// Returns a reference to the underlying `std::array` @@ -279,7 +281,7 @@ class DiscreteVector : public detail::DiscreteVectorConversionOperators && ...)>> - explicit KOKKOS_FUNCTION constexpr DiscreteVector(DVects const&... delems) noexcept + KOKKOS_FUNCTION constexpr explicit DiscreteVector(DVects const&... delems) noexcept : m_values {take(delems...).template get()...} { } @@ -289,7 +291,7 @@ class DiscreteVector : public detail::DiscreteVectorConversionOperators && ...)>, class = std::enable_if_t<(std::is_convertible_v && ...)>, class = std::enable_if_t> - explicit KOKKOS_FUNCTION constexpr DiscreteVector(Params const&... params) noexcept + KOKKOS_FUNCTION constexpr explicit DiscreteVector(Params const&... params) noexcept : m_values {static_cast(params)...} { } diff --git a/include/ddc/experimental/single_discretization.hpp b/include/ddc/experimental/single_discretization.hpp index 2eded36f9..5261b4528 100644 --- a/include/ddc/experimental/single_discretization.hpp +++ b/include/ddc/experimental/single_discretization.hpp @@ -58,7 +58,7 @@ class SingleDiscretization : SingleDiscretizationBase using discrete_vector_type = DiscreteVector; - Impl(continuous_element_type origin) noexcept : m_point(std::move(origin)) {} + explicit Impl(continuous_element_type origin) noexcept : m_point(std::move(origin)) {} template explicit Impl(Impl const& impl) : m_point(impl.m_point) diff --git a/include/ddc/kernels/splines/bsplines_non_uniform.hpp b/include/ddc/kernels/splines/bsplines_non_uniform.hpp index b45e80cd2..0aeec2962 100644 --- a/include/ddc/kernels/splines/bsplines_non_uniform.hpp +++ b/include/ddc/kernels/splines/bsplines_non_uniform.hpp @@ -117,7 +117,7 @@ class NonUniformBSplines : detail::NonUniformBSplinesBase * * @param breaks The std::initializer_list of the coordinates of break points. */ - explicit Impl(std::initializer_list> breaks) + Impl(std::initializer_list> breaks) : Impl(breaks.begin(), breaks.end()) { } diff --git a/include/ddc/non_uniform_point_sampling.hpp b/include/ddc/non_uniform_point_sampling.hpp index 9a547ae85..392afd256 100644 --- a/include/ddc/non_uniform_point_sampling.hpp +++ b/include/ddc/non_uniform_point_sampling.hpp @@ -64,7 +64,7 @@ class NonUniformPointSampling : detail::NonUniformPointSamplingBase Impl() = default; /// @brief Construct a `NonUniformPointSampling` using a brace-list, i.e. `NonUniformPointSampling mesh({0., 1.})` - explicit Impl(std::initializer_list points) + Impl(std::initializer_list points) { std::vector host_points(points.begin(), points.end()); Kokkos::View const diff --git a/tests/splines/cosine_evaluator.hpp b/tests/splines/cosine_evaluator.hpp index 71328f90f..2835dc3e6 100644 --- a/tests/splines/cosine_evaluator.hpp +++ b/tests/splines/cosine_evaluator.hpp @@ -27,8 +27,8 @@ struct CosineEvaluator public: template - Evaluator([[maybe_unused]] Domain domain) : m_c0(1.0) - , m_c1(0.0) + explicit Evaluator([[maybe_unused]] Domain domain) : m_c0(1.0) + , m_c1(0.0) { } diff --git a/tests/splines/polynomial_evaluator.hpp b/tests/splines/polynomial_evaluator.hpp index d56e7202b..5ef584916 100644 --- a/tests/splines/polynomial_evaluator.hpp +++ b/tests/splines/polynomial_evaluator.hpp @@ -28,7 +28,8 @@ struct PolynomialEvaluator public: template - Evaluator(Domain domain) : m_xN(std::max(std::abs(rmin(domain)), std::abs(rmax(domain)))) + explicit Evaluator(Domain domain) + : m_xN(std::max(std::abs(rmin(domain)), std::abs(rmax(domain)))) { std::random_device rd; std::mt19937 gen(rd()); diff --git a/tests/splines/spline_error_bounds.hpp b/tests/splines/spline_error_bounds.hpp index a8111377b..c96d5b67c 100644 --- a/tests/splines/spline_error_bounds.hpp +++ b/tests/splines/spline_error_bounds.hpp @@ -49,7 +49,7 @@ class SplineErrorBounds } public: - SplineErrorBounds(Evaluator const& evaluator) : m_evaluator(evaluator) {} + explicit SplineErrorBounds(Evaluator const& evaluator) : m_evaluator(evaluator) {} double error_bound(double cell_width, int degree) {