лямбда, возвращающая bool

Я хочу найти точку с меньшей координатой Y (если таких точек больше, найдите точку с наименьшим X). При написании его с помощью лямбда:

    std::min_element(begin, end, [](PointAndAngle& p1, PointAndAngle& p2) {
        if (p1.first->y() < p2.first->y())
            return true;
        else if (p1.first->y() > p2.first->y())
            return false;
        else 
            return p1.first->x() < p2.first->x();
    }

я получаю:

error C3499: a lambda that has been specified to have a void return type cannot return a value

в чем разница между:

    // works
    std::min_element(begin, end, [](PointAndAngle& p1, PointAndAngle& p2) {
        return p1.first->y() < p2.first->y();
    }

и

    // does not work
    std::min_element(begin, end, [](PointAndAngle& p1, PointAndAngle& p2) {
        if (p1.first->y() < p2.first->y())
            return true;
        else 
            return false;
    }
18
задан Inverse 15 March 2017 в 14:56
поделиться