diff --git a/googletest/include/gtest/internal/gtest-param-util.h b/googletest/include/gtest/internal/gtest-param-util.h index 71677934..c41d5b3d 100644 --- a/googletest/include/gtest/internal/gtest-param-util.h +++ b/googletest/include/gtest/internal/gtest-param-util.h @@ -99,6 +99,7 @@ class [[nodiscard]] ParamGenerator; template class [[nodiscard]] ParamIteratorInterface { public: + ParamIteratorInterface() = default; virtual ~ParamIteratorInterface() = default; // A pointer to the base generator instance. // Used only for the purposes of iterator comparison @@ -121,6 +122,9 @@ class [[nodiscard]] ParamIteratorInterface { // element in the sequence generated by the generator. // Used for implementing ParamGenerator::operator==(). virtual bool Equals(const ParamIteratorInterface& other) const = 0; + protected: + // Make available for subclasses to use to implement Clone(). + ParamIteratorInterface(const ParamIteratorInterface&) = default; }; // Class iterating over elements provided by an implementation of @@ -844,7 +848,7 @@ class [[nodiscard]] CartesianProductGenerator template class IteratorImpl; template - class IteratorImpl> + class IteratorImpl> final : public ParamIteratorInterface { public: IteratorImpl(const ParamGeneratorInterface* base, @@ -856,7 +860,7 @@ class [[nodiscard]] CartesianProductGenerator current_(is_end ? end_ : begin_) { ComputeCurrentValue(); } - ~IteratorImpl() override = default; + ~IteratorImpl() final = default; const ParamGeneratorInterface* BaseGenerator() const override { return base_; @@ -900,6 +904,8 @@ class [[nodiscard]] CartesianProductGenerator } private: + IteratorImpl(const IteratorImpl&) = default; + template void AdvanceIfEnd() { if (std::get(current_) != std::get(end_)) return;