Add irreflexive comparison debug check

François Dumont frs.dumont@gmail.com
Wed Jul 29 20:08:00 GMT 2015


Hi

    Here is a patch to add irreflexive debug check.

    Standard algos signatures are such that there is no guaranty that
the operator < or predicate to compare the iterator value type will
exist. So I had to check if the call is valid using C++11 features
declval and decltype.

    * include/debug/formatter.h (_Debug_msg_id::__msg_irreflexive_ordering):
    New enum entry.
    * include/debug/functions.h (_Irreflexive_checker): New.
    (__is_irreflexive, __is_irreflexive_pred): New.
    * include/debug/macros.h (__glibcxx_check_irreflexive,
    __glibcxx_check_irreflexive_pred): New macros.
    * include/debug/debug.h (__glibcxx_requires_irreflexive,
    __glibcxx_requires_irreflexive_pred): New macros, use latter.
    * include/bits/stl_algo.h
    (partial_sort_copy): Add irreflexive debug check.
    (partial_sort_copy): Likewise.
    (lower_bound): Likewise.
    (upper_bound): Likewise.
    (equal_range): Likewise.
    (binary_search): Likewise.
    (inplace_merge): Likewise.
    (includes): Likewise.
    (next_permutation): Likewise.
    (prev_permutation): Likewise.
    (is_sorted_until): Likewise.
    (minmax_element): Likewise.
    (partial_sort): Likewise.
    (nth_element): Likewise.
    (sort): Likewise.
    (merge): Likewise.
    (stable_sort): Likewise.
    (set_union): Likewise.
    (set_intersection): Likewise.
    (set_difference): Likewise.
    (set_symmetric_difference): Likewise.
    (min_element): Likewise.
    (max_element): Likewise.
    * include/bits/stl_algobase.h
    (lower_bound): Likewise.
    (lexicographical_compare): Likewise.
    * include/bits/stl_heap.h
    (push_heap): Likewise.
    (pop_heap): Likewise.
    (make_heap): Likewise.
    (sort_heap): Likewise.
    (is_heap_until): Likewise.

Ok to commit ?

François

-------------- next part --------------
A non-text attachment was scrubbed...
Name: irreflexive_check.patch
Type: text/x-patch
Size: 34020 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/libstdc++/attachments/20150729/0b5ac260/attachment.bin>


More information about the Libstdc++ mailing list