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

            Bug ID: 65942
           Summary: cannot use std::function as comparator in algorithms
           Product: gcc
           Version: 5.0
            Status: UNCONFIRMED
          Severity: critical
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: a...@cloudius-systems.com
  Target Milestone: ---

Too much template magic causes gcc 5.1 to reject the following valid code:



#include <experimental/optional>
#include <algorithm>
#include <functional>

using T1 = int;
using T2 = std::vector<T1>;

bool cmp1(const T1& a, const T1& b) { return a < b; }
std::function<bool (const T1&, const T1&)> cmp2 = cmp1;

int main(int ac, char** av) {
  T2 v;
  std::sort(v.begin(), v.end(), cmp1); // works
  std::sort(v.begin(), v.end(), cmp2); // fails
}

Even though the two calls to sort() should be identical, the second one does
not compile.

This is a regression from 4.9

Reply via email to