vendredi 5 octobre 2018

Why do I get a compilation error for this program in g++ 4.8.5?

I'm trying to solve a problem from an online judge and the judge uses g++ 4.8.5.

The following program compiles correctly on my machine (g++ 8.2.0) with -std=c++11 -pedantic-errors:

#include <algorithm>

using namespace std;

struct Task {
    int deadline;
    const bool operator<(const Task &o) {
        return deadline < o.deadline;
    }
};
Task tasks[] = {8, 4, 3, 5, 1, 2, 0, 7};

int main(void)
{
    sort(tasks, tasks + 8);
}

However, the judge gives me the following errors:

In file included from /usr/include/c++/4.8/algorithm:62:0, from Main.cpp:1: /usr/include/c++/4.8/bits/stl_algo.h: In instantiation of '_RandomAccessIterator std::__unguarded_partition(_RandomAccessIterator, _RandomAccessIterator, const _Tp&) [with _RandomAccessIterator = Task*; _Tp = Task]': /usr/include/c++/4.8/bits/stl_algo.h:2283:70: required from > '_RandomAccessIterator std::__unguarded_partition_pivot(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessIterator = Task*]' /usr/include/c++/4.8/bits/stl_algo.h:2315:54: required from 'void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size) [with _RandomAccessIterator = Task*; _Size = int]' /usr/include/c++/4.8/bits/stl_algo.h:5461:36: required from 'void std::sort(_RAIter, _RAIter) [with _RAIter = Task*]' Main.cpp:15:23: required from here /usr/include/c++/4.8/bits/stl_algo.h:2245:19: error: passing 'const Task' as 'this' argument of 'const bool Task::operator<(const Task&)' discards qualifiers [-fpermissive] while (__pivot < *__last)

The judge compiles with -std=c++11 -O2 -lm.

Does C++ 4.8 not fully support C++11? How do I compile this?

Aucun commentaire:

Enregistrer un commentaire