Fix ParamIteratorInterface copy constructor defaulting

This commit is contained in:
Jeremy Nimmer 2025-11-06 10:36:07 -08:00
parent 6ec14dfd8c
commit f1e068d5c5

View File

@ -99,6 +99,7 @@ class ParamGenerator;
template <typename T>
class 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 ParamIteratorInterface {
// element in the sequence generated by the generator.
// Used for implementing ParamGenerator<T>::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
@ -842,7 +846,7 @@ class CartesianProductGenerator
template <class I>
class IteratorImpl;
template <size_t... I>
class IteratorImpl<std::index_sequence<I...>>
class IteratorImpl<std::index_sequence<I...>> final
: public ParamIteratorInterface<ParamType> {
public:
IteratorImpl(const ParamGeneratorInterface<ParamType>* base,
@ -854,7 +858,7 @@ class CartesianProductGenerator
current_(is_end ? end_ : begin_) {
ComputeCurrentValue();
}
~IteratorImpl() override = default;
~IteratorImpl() final = default;
const ParamGeneratorInterface<ParamType>* BaseGenerator() const override {
return base_;
@ -898,6 +902,8 @@ class CartesianProductGenerator
}
private:
IteratorImpl(const IteratorImpl&) = default;
template <size_t ThisI>
void AdvanceIfEnd() {
if (std::get<ThisI>(current_) != std::get<ThisI>(end_)) return;