logoalt Hacker News

akoboldfryingtoday at 3:36 AM2 repliesview on HN

Reminds me of an idea I had years ago, for implementing "named binary operator syntax" in C++ so that stuff like the following would work:

    int x = 5 <xor> 3; // x = 6
The basic trick was to notice that this is really parsed as:

    int x = ((5 < xor) > 3);
which you could implement with (roughly):

    struct XorType1 { ... } xor;

    struct XorType2 {
      int left;
      XorType2(int left) : left(left) {}
      int operator>(int right) const {
        return left ^ right;
      }
    };

    XorType2 operator<(int left, XorType1 const& ignored) {
      return XorType2(left);
    }
But I sat on this for a while and later discovered someone else had already come up with it :-/

EDIT: Thanks commenter hawkice for fixing my XOR arithmetic!


Replies

gettingoverittoday at 3:40 AM

Yeah, I've first seen it over 15 years ago. Usually you use operator of the same priority as you'd like, and also #define xor &xor_i& to get all that detail out of sight.

hawkicetoday at 3:38 AM

This couldn't possibly matter, but 5 xor 3 is 6.

show 2 replies