Criteria for loopsolver bare dangers with copy construction
Criteria that refer to a specific solver or iteration step at construction time are dangerous. The constructed solver should not be copy/move-constructible since the criteria it contains may be(come) invalid.
IMHO the respective solvers should either be non-copy/move-constructible (in the best case this is induced by the respective criteria revoking the operation) or the respective solver must be retrieved not on-construction but on-call (which would require an interface change for Criterion::operator()()
(which might imply more changes that I am not aware of).
P.S. The same applies to other (experimental) solvers that use the Criterion
framework, e.g. flexible-loopsolver and CriterionIterationSolver
.