[algorithms.results] # 26 Algorithms library [[algorithms]](./#algorithms) ## 26.5 Algorithm result types [algorithms.results] [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/algorithms.tex#L4200) Each of the class templates specified in this subclause has the template parameters, data members, and special members specified below, and has no base classes or members other than those specified[.](#1.sentence-1) namespace std::ranges {templatestruct [in_fun_result](#lib:in_fun_result "26.5 Algorithm result types [algorithms.results]") {[[no_unique_address]] I [in](#lib:in_fun_result,in "26.5 Algorithm result types [algorithms.results]"); [[no_unique_address]] F [fun](#lib:in_fun_result,fun "26.5 Algorithm result types [algorithms.results]"); templaterequires [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]") && [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]")constexpr operator in_fun_result() const & {return {in, fun}; }templaterequires [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]") && [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]")constexpr operator in_fun_result() && {return {std::move(in), std::move(fun)}; }}; templatestruct [in_in_result](#lib:in_in_result "26.5 Algorithm result types [algorithms.results]") {[[no_unique_address]] I1 [in1](#lib:in_in_result,in1 "26.5 Algorithm result types [algorithms.results]"); [[no_unique_address]] I2 [in2](#lib:in_in_result,in2 "26.5 Algorithm result types [algorithms.results]"); templaterequires [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]") && [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]")constexpr operator in_in_result() const & {return {in1, in2}; }templaterequires [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]") && [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]")constexpr operator in_in_result() && {return {std::move(in1), std::move(in2)}; }}; templatestruct [in_out_result](#lib:in_out_result "26.5 Algorithm result types [algorithms.results]") {[[no_unique_address]] I [in](#lib:in_out_result,in "26.5 Algorithm result types [algorithms.results]"); [[no_unique_address]] O [out](#lib:in_out_result,out "26.5 Algorithm result types [algorithms.results]"); templaterequires [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]") && [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]")constexpr operator in_out_result() const & {return {in, out}; }templaterequires [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]") && [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]")constexpr operator in_out_result() && {return {std::move(in), std::move(out)}; }}; templatestruct [in_in_out_result](#lib:in_in_out_result "26.5 Algorithm result types [algorithms.results]") {[[no_unique_address]] I1 [in1](#lib:in_in_out_result,in1 "26.5 Algorithm result types [algorithms.results]"); [[no_unique_address]] I2 [in2](#lib:in_in_out_result,in2 "26.5 Algorithm result types [algorithms.results]"); [[no_unique_address]] O [out](#lib:in_in_out_result,out "26.5 Algorithm result types [algorithms.results]"); templaterequires [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]") &&[convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]") &&[convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]")constexpr operator in_in_out_result() const & {return {in1, in2, out}; }templaterequires [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]") &&[convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]") &&[convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]")constexpr operator in_in_out_result() && {return {std::move(in1), std::move(in2), std::move(out)}; }}; templatestruct [in_out_out_result](#lib:in_out_out_result "26.5 Algorithm result types [algorithms.results]") {[[no_unique_address]] I [in](#lib:in_out_out_result,in "26.5 Algorithm result types [algorithms.results]"); [[no_unique_address]] O1 [out1](#lib:in_out_out_result,out1 "26.5 Algorithm result types [algorithms.results]"); [[no_unique_address]] O2 [out2](#lib:in_out_out_result,out2 "26.5 Algorithm result types [algorithms.results]"); templaterequires [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]") &&[convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]") &&[convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]")constexpr operator in_out_out_result() const & {return {in, out1, out2}; }templaterequires [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]") &&[convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]") &&[convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]")constexpr operator in_out_out_result() && {return {std::move(in), std::move(out1), std::move(out2)}; }}; templatestruct [min_max_result](#lib:min_max_result "26.5 Algorithm result types [algorithms.results]") {[[no_unique_address]] T [min](#lib:min_max_result,min "26.5 Algorithm result types [algorithms.results]"); [[no_unique_address]] T [max](#lib:min_max_result,max "26.5 Algorithm result types [algorithms.results]"); templaterequires [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]")constexpr operator min_max_result() const & {return {min, max}; }templaterequires [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]")constexpr operator min_max_result() && {return {std::move(min), std::move(max)}; }}; templatestruct [in_found_result](#lib:in_found_result "26.5 Algorithm result types [algorithms.results]") {[[no_unique_address]] I [in](#lib:in_found_result,in "26.5 Algorithm result types [algorithms.results]"); bool [found](#lib:in_found_result,found "26.5 Algorithm result types [algorithms.results]"); templaterequires [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]")constexpr operator in_found_result() const & {return {in, found}; }templaterequires [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]")constexpr operator in_found_result() && {return {std::move(in), found}; }}; templatestruct [in_value_result](#lib:in_value_result "26.5 Algorithm result types [algorithms.results]") {[[no_unique_address]] I [in](#lib:in_value_result,in "26.5 Algorithm result types [algorithms.results]"); [[no_unique_address]] T [value](#lib:in_value_result,value "26.5 Algorithm result types [algorithms.results]"); templaterequires [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]") && [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]")constexpr operator in_value_result() const & {return {in, value}; }templaterequires [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]") && [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]")constexpr operator in_value_result() && {return {std::move(in), std::move(value)}; }}; templatestruct [out_value_result](#lib:out_value_result "26.5 Algorithm result types [algorithms.results]") {[[no_unique_address]] O [out](#lib:out_value_result,out "26.5 Algorithm result types [algorithms.results]"); [[no_unique_address]] T [value](#lib:out_value_result,value "26.5 Algorithm result types [algorithms.results]"); templaterequires [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]") && [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]")constexpr operator out_value_result() const & {return {out, value}; }templaterequires [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]") && [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_­to [concept.convertible]")constexpr operator out_value_result() && {return {std::move(out), std::move(value)}; }};}