Was sind transparente Komparatoren?

In C++14, assoziative Container scheinen sich verändert zu haben, die von C++11 – [assoziativ.Bestand]/13 sagt:

Die member-Funktion Vorlagen findcountlower_boundupper_boundund equal_range wird nicht an überlast Auflösung, es sei denn, die Art Compare::is_transparent vorhanden ist.

Was ist die Absicht, einen Komparator "transparent"?

C++14 auch eine Bibliothek mit Vorlagen wie diese:

template <class T = void> struct less {
    constexpr bool operator()(const T& x, const T& y) const;
    typedef T first_argument_type;
    typedef T second_argument_type;
    typedef bool result_type;
};

template <> struct less<void> {
    template <class T, class U> auto operator()(T&& t, U&& u) const
    -> decltype(std::forward<T>(t) < std::forward<U>(u));
    typedef *unspecified* is_transparent;
};

Also zum Beispiel std::set<T, std::less<T>> würde nicht haben einen transparenten Komparator, aber std::set<T, std::less<>> würde haben.

Welches problem wird mit dieser lösen, und tut dies ändern, wie die standard-Containern zu arbeiten? Zum Beispiel die template Parameter std::set noch Key, Compare = std::less<Key>, ...also nicht die Standard-set verliert seine findcount usw. Mitglieder?

InformationsquelleAutor der Frage Kerrek SB | 2013-12-01

Schreibe einen Kommentar