This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hello, first of all, my best regards for the developers of gcc, it is a very big and great piece of work, I appreciate it much and use it frequently. I am very curios over a piece of code I wrote recently. In a slight variation it produces a compile error from g++ and I have no idea if i) I do not understand c++ enough ii) it is a bug in g++ iii) it is a design flaw in c++ so I decided to share this one with you (you can freely ignore it without offending me). Topic: overloading the == and != operators: this code #include <iostream> // comment in to get compile error #define BUG struct t_settings { bool operator==(t_settings const &a){ if (a.x != this->x) { return (false); } if (a.y != this->y) { return (false); } if (a.z != this->z) { return (false); } return (true); } #ifndef BUG bool operator!=(t_settings const &a){ return ( ! ( *this == a ) ); } #else bool operator!=(t_settings const &a){ return ( ! ( a == *this ) ); } #endif int x; int y; int z; }; int main (int argc, char **argv){ t_settings mySettings; mySettings.x=1; mySettings.y=2; mySettings.z=3; t_settings hisSettings; hisSettings.x=1; hisSettings.y=2; hisSettings.z=4; if (mySettings != hisSettings){ std::cout << "Settings not equal" << std::endl; } else { std::cout << "Settings equal" << std::endl; } return (0); } g++ (version 3 and 4 equally) produces: In member function `bool t_settings::operator!=(const t_settings&)': error: passing `const t_settings' as `this' argument of `bool t_settings::operator==(const t_settings&)' discards qualifiers comment out #define BUG and it compiles. So the order of a and *this are all that matters. Sorry, but I have no idea why this is so. Greetings Bernhard Günther, Bonn, Germany -- -------------------------------------------------------------------------- Bernhard Guenther <bernhard@guenther.pl> <bernhard@epgert.com> ICQ: 1632197, Jabber: tiger@jabber.fsinf.de Tel: +4922896779696, Cell: +491704931668 --------------------------------------------------------------------------
Attachment:
pgp00000.pgp
Description: PGP signature
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |