Search code examples
c++stdarray

std::array Can't compare between two arrays with my class as its element


I have two std::array same size and store the same element type (a class that I wrote) when I compare them using == operator compiler throws this error: ...\include\xutility(2919): error C2672: 'operator __surrogate_func': no matching overloaded function found.

I tried comparing tow arrays with vectors as their elements and it worked but comparing arrays with any class I write I'm getting that error.

Test class:

class Class {

    int i;

public:
    Class() {}
    Class(const Class& other) {}
    Class(Class&& other) {}
    ~Class() {}

    Class operator= (const Class& other) {}
    Class operator= (Class&& other) {}

    BOOL operator== (const Class& other) {}

};

Comparison:

   std::array<Class, 3> a0 = {};
   std::array<Class, 3> a1 = {};

      if (a0 == a1)
        "COOL";

Error I'm getting:

...\include\xutility(2919): error C2672: 'operator __surrogate_func': no matching overloaded function found

Solution

  • If you look at std::array's definition of operator==, you'll notice that it's defined for const arrays. That means you can only access elements as const, which your Class's operator== doesn't do.

    Change it to take implicit this as const:

    BOOL operator== (const Class& other) const { /*...*/ }
                                         ^^^^^
    

    While at it, you probably want to return bool instead of BOOL:

    bool operator== (const Class& other) const { /*...*/ }