17 [[maybe_unused]]
Options &opts) {
19 auto builder = []<
class Direction>(
tag_t<Direction>) {
21 auto inner_solver = make_inner_solver<Solver<Direction>>(opts);
25 return [solver{std::move(solver)},
33 std::map<std::string_view, solver_builder_func_t> builders{
37 if (direction.empty())
38 direction =
"newtontr";
39 auto builder_it = builders.find(direction);
40 if (builder_it != builders.end())
41 return builder_it->second(direction, opts);
43 throw std::invalid_argument(
44 "Unknown direction '" + std::string(direction) +
"'\n" +
45 " Available directions: " +
47 [](
const auto &x) {
return x.first; }));