diff --git a/include/rexy/detail/algorithm.hpp b/include/rexy/detail/algorithm.hpp index 52965ec..edca293 100644 --- a/include/rexy/detail/algorithm.hpp +++ b/include/rexy/detail/algorithm.hpp @@ -22,8 +22,7 @@ #include "../utility.hpp" //swap #include //nothrow_invocable -#include //less, greater -#include //pair +#include //pair, forward #include //iterator_traits #include //size_t @@ -81,10 +80,15 @@ namespace rexy::detail{ } return {max_suffix, period}; } + template constexpr std::pair critical_factorization(const Iter& nstart, const Iter& nend){ - auto msuffix = max_suffix(nstart, nend - nstart, std::less{}); - auto msuffix_rev = max_suffix(nstart, nend - nstart, std::greater{}); + auto msuffix = max_suffix(nstart, nend - nstart, [](T&& left, U&& right) constexpr{ + return std::forward(left) < std::forward(right); + }); + auto msuffix_rev = max_suffix(nstart, nend - nstart, [](T&& left, U&& right) constexpr{ + return std::forward(left) > std::forward(right); + }); if(msuffix.first < msuffix_rev.first){ return msuffix_rev; }