From aae7e7ffaed502206b24fd9335caa182ff239dda Mon Sep 17 00:00:00 2001 From: Fredrik Roubert Date: Wed, 19 Mar 2025 19:35:35 +0100 Subject: [PATCH] ICU-23004 Code Review: Mark single-argument constructors explicit. --- icu4c/source/common/unicode/utfiter.h | 28 +++++++++++----------- icu4c/source/test/intltest/utfitertest.cpp | 6 ++--- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/icu4c/source/common/unicode/utfiter.h b/icu4c/source/common/unicode/utfiter.h index b9008b930d7..75508b45105 100644 --- a/icu4c/source/common/unicode/utfiter.h +++ b/icu4c/source/common/unicode/utfiter.h @@ -882,7 +882,7 @@ class UTFIterator { // so that we don't promise always returning CodeUnits. class Proxy { public: - Proxy(CodeUnits &units) : units_(units) {} + explicit Proxy(CodeUnits &units) : units_(units) {} CodeUnits &operator*() { return units_; } CodeUnits *operator->() { return &units_; } private: @@ -913,7 +913,7 @@ public: p_(p), start_(p), limit_(limit), units_(0, 0, false, p, p) {} // Constructs an iterator start or limit sentinel. // Requires UnitIter to be copyable. - UTFIterator(UnitIter p) : p_(p), start_(p), limit_(p), units_(0, 0, false, p, p) {} + explicit UTFIterator(UnitIter p) : p_(p), start_(p), limit_(p), units_(0, 0, false, p, p) {} UTFIterator(UTFIterator &&src) noexcept = default; UTFIterator &operator=(UTFIterator &&src) noexcept = default; @@ -1059,7 +1059,7 @@ class UTFIterator< // so that we don't promise always returning CodeUnits. class Proxy { public: - Proxy(CodeUnits &units) : units_(units) {} + explicit Proxy(CodeUnits &units) : units_(units) {} CodeUnits &operator*() { return units_; } CodeUnits *operator->() { return &units_; } private: @@ -1077,7 +1077,7 @@ public: // Constructs an iterator start or limit sentinel. // Requires p to be copyable. - UTFIterator(UnitIter p) : p_(std::move(p)), limit_(p_) {} + explicit UTFIterator(UnitIter p) : p_(std::move(p)), limit_(p_) {} UTFIterator(UTFIterator &&src) noexcept = default; UTFIterator &operator=(UTFIterator &&src) noexcept = default; @@ -1160,7 +1160,7 @@ class std::reverse_iterator() { return &units_; } private: @@ -1174,7 +1174,7 @@ public: using difference_type = typename std::iterator_traits::difference_type; using iterator_category = std::bidirectional_iterator_tag; - reverse_iterator(U_HEADER_ONLY_NAMESPACE::UTFIterator iter) : + explicit reverse_iterator(U_HEADER_ONLY_NAMESPACE::UTFIterator iter) : p_(iter.getLogicalPosition()), start_(iter.start_), limit_(iter.limit_), units_(0, 0, false, p_, p_) {} @@ -1299,7 +1299,7 @@ public: * Constructs a C++ "range" object over the code points in the string. * @draft ICU 78 */ - UTFStringCodePoints(std::basic_string_view s) : s(s) {} + explicit UTFStringCodePoints(std::basic_string_view s) : s(s) {} /** @draft ICU 78 */ UTFStringCodePoints(const UTFStringCodePoints &other) = default; @@ -1447,7 +1447,7 @@ class UnsafeUTFIterator { // so that we don't promise always returning UnsafeCodeUnits. class Proxy { public: - Proxy(UnsafeCodeUnits &units) : units_(units) {} + explicit Proxy(UnsafeCodeUnits &units) : units_(units) {} UnsafeCodeUnits &operator*() { return units_; } UnsafeCodeUnits *operator->() { return &units_; } private: @@ -1467,7 +1467,7 @@ public: std::bidirectional_iterator_tag, std::forward_iterator_tag>; - UnsafeUTFIterator(UnitIter p) : p_(p), units_(0, 0, p, p) {} + explicit UnsafeUTFIterator(UnitIter p) : p_(p), units_(0, 0, p, p) {} UnsafeUTFIterator(UnsafeUTFIterator &&src) noexcept = default; UnsafeUTFIterator &operator=(UnsafeUTFIterator &&src) noexcept = default; @@ -1608,7 +1608,7 @@ class UnsafeUTFIterator< // so that we don't promise always returning UnsafeCodeUnits. class Proxy { public: - Proxy(UnsafeCodeUnits &units) : units_(units) {} + explicit Proxy(UnsafeCodeUnits &units) : units_(units) {} UnsafeCodeUnits &operator*() { return units_; } UnsafeCodeUnits *operator->() { return &units_; } private: @@ -1622,7 +1622,7 @@ public: using difference_type = typename std::iterator_traits::difference_type; using iterator_category = std::input_iterator_tag; - UnsafeUTFIterator(UnitIter p) : p_(std::move(p)) {} + explicit UnsafeUTFIterator(UnitIter p) : p_(std::move(p)) {} UnsafeUTFIterator(UnsafeUTFIterator &&src) noexcept = default; UnsafeUTFIterator &operator=(UnsafeUTFIterator &&src) noexcept = default; @@ -1702,7 +1702,7 @@ class std::reverse_iterator() { return &units_; } private: @@ -1716,7 +1716,7 @@ public: using difference_type = typename std::iterator_traits::difference_type; using iterator_category = std::bidirectional_iterator_tag; - reverse_iterator(U_HEADER_ONLY_NAMESPACE::UnsafeUTFIterator iter) : + explicit reverse_iterator(U_HEADER_ONLY_NAMESPACE::UnsafeUTFIterator iter) : p_(iter.getLogicalPosition()), units_(0, 0, p_, p_) {} reverse_iterator(reverse_iterator &&src) noexcept = default; @@ -1835,7 +1835,7 @@ public: * Constructs a C++ "range" object over the code points in the string. * @draft ICU 78 */ - UnsafeUTFStringCodePoints(std::basic_string_view s) : s(s) {} + explicit UnsafeUTFStringCodePoints(std::basic_string_view s) : s(s) {} /** @draft ICU 78 */ UnsafeUTFStringCodePoints(const UnsafeUTFStringCodePoints &other) = default; diff --git a/icu4c/source/test/intltest/utfitertest.cpp b/icu4c/source/test/intltest/utfitertest.cpp index ca706bca117..08201daadd9 100644 --- a/icu4c/source/test/intltest/utfitertest.cpp +++ b/icu4c/source/test/intltest/utfitertest.cpp @@ -116,7 +116,7 @@ class SinglePassIter; template class SinglePassSource { public: - SinglePassSource(std::basic_string_view s) : p(s.data()), limit(s.data() + s.length()) {} + explicit SinglePassSource(std::basic_string_view s) : p(s.data()), limit(s.data() + s.length()) {} SinglePassIter begin() { return SinglePassIter(*this); } SinglePassIter end() { return SinglePassIter(); } @@ -140,7 +140,7 @@ public: // so we claim it to be a LegacyInputIterator. It *is* single-pass. typedef std::input_iterator_tag iterator_category; - SinglePassIter(SinglePassSource &src) : src(&src) {} + explicit SinglePassIter(SinglePassSource &src) : src(&src) {} // limit sentinel SinglePassIter() : src(nullptr) {} @@ -183,7 +183,7 @@ public: // https://en.cppreference.com/w/cpp/named_req/ForwardIterator#Multi-pass_guarantee typedef std::forward_iterator_tag iterator_category; - FwdIter(const Unit *data) : p(data) {} + explicit FwdIter(const Unit *data) : p(data) {} bool operator==(const FwdIter &other) const { return p == other.p; } bool operator!=(const FwdIter &other) const { return !operator==(other); }