std::max

Header: <algorithm>

Returns the greater of the given values.

# Declarations

template< class T >
const T& max( const T& a, const T& b );

(constexpr since C++14)

template< class T, class Compare >
const T& max( const T& a, const T& b, Compare comp );

(constexpr since C++14)

template< class T >
T max( std::initializer_list<T> ilist );

(since C++11) (constexpr since C++14)

template< class T, class Compare >
T max( std::initializer_list<T> ilist, Compare comp );

(since C++11) (constexpr since C++14)

# Parameters

# Notes

Capturing the result of std::max by reference produces a dangling reference if one of the parameters is a temporary and that parameter is returned:

# Example

#include <algorithm>
#include <iomanip>
#include <iostream>
#include <string_view>
 
int main()
{
    auto longest = [](const std::string_view s1, const std::string_view s2)
                   {
                       return s1.size() < s2.size();
                   };
 
    std::cout << "Larger of 69 and 96 is " << std::max(69, 96) << "\n"
                 "Larger of 'q' and 'p' is '" << std::max('q', 'p') << "'\n"
                 "Largest of 010, 10, 0X10, and 0B10 is "
              << std::max({010, 10, 0X10, 0B10}) << '\n'
              << R"(Longest of "long", "short", and "int" is )"
              << std::quoted(std::max({"long", "short", "int"}, longest)) << '\n';
}

# Defect reports

DRApplied toBehavior as publishedCorrect behavior
LWG 281C++98T was required to be CopyConstructible for overloads (1,2)not required
LWG 2239C++98C++111. T was required to be LessThanComparable for overloads (2) (C++98) and (4) (C++11)2. the complexity requirements were missing1. not required2. added the requirements

# See also