https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78134

            Bug ID: 78134
           Summary: set::set lower_bound() for transparent comparator
                    returns const_iterator
           Product: gcc
           Version: 6.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: barry.revzin at gmail dot com
  Target Milestone: ---

#include <set>

struct comp {
    bool operator()(int i, int j) const {
        return i < j;
    }

    using is_transparent = void;
};

template <class T, class U> struct is_same { static constexpr bool value =
false;  };
template <class T> struct is_same<T, T> { static constexpr bool value = true;
};

int main() {
    using S = std::set<int, comp>;
    S s;
    static_assert(is_same<decltype(s.lower_bound('a')), S::iterator>::value,
"!");

}

We're invoking the function template version of lower_bound(), but s is
non-const so the result should be iterator. Instead we're getting
const_iterator. This compiles on clang with libc++.

Reply via email to