C++0x 可変引数min/max/minmax

C++0x では、可変引数版の min/max/minmax が導入されます。
(※ minmax は新規。戻り値で min と max の pair を返す)


可変引数の指定には、 std::initializer_list を使用します。

// <algorithm>
template<class T>
T min(initializer_list<T> t);

template<class T, class Compare>
T min(initializer_list<T> t, Compare comp);


template<class T>
T max(initializer_list<T> t);

template<class T, class Compare>
T max(initializer_list<T> t, Compare comp);


template<class T>
pair<const T&, const T&> minmax(initializer_list<T> t);

template<class T, class Compare>
pair<const T&, const T&> minmax(initializer_list<T> t, Compare comp);
int            value  = min({3, 1, 4, 5, 2});    // 1
int            value  = max({3, 1, 4, 5, 2});    // 5
pair<int, int> values = minmax({3, 1, 4, 5, 2}); // first == 1, second == 5


可変引数版の min/max/minmax は元々は可変引数テンプレートでの実装が提案されていました
以下のエントリにある議論から、 std::initializer_list を使用するよう変更されました。


可変引数関数を定義する2つの方法



N2772 Variadic functions: Variadic templates or initializer lists? -- Revision 1

variadic std::min

std::minmax

C++0x言語拡張まとめ