Inspired by a thread over at comp.std.c++, I suggest the following MACRO for inclusion into Boost. Please discuss :)

//
//  A logical xor operator for C++.
//
// Create a macro for the following syntax: ((a xor b)). Note that
// the bracket are part of the syntax and shall not be removed!
// The macro guarantees left-to-right evaluation, a sequence point
// between the evaluation of 'a' and 'b', conversion of the
// parameters to bool and a boolean result.
#define BOOST_DETAIL_XOR(x) !static_cast<bool>(x):static_cast<bool>(x)
#define xor )?BOOST_DETAIL_XOR(

// Usage:

#include <iostream>
using namespace std;

struct B
{
   operator bool() const { return true; }
   B operator!() const { return B(); }
};

int main()
{
   B a, b;

   // Oops...
   cout << ( a != b ) << endl;
   cout << ( a ? !b : !!b ) << endl;

   // Works, but long, ugly syntax and repeating 'b':
   cout << ( a ? !static_cast<bool>(b) : static_cast<bool>(b) ) << endl;

   // Cool?
   cout << (( a xor b )) << endl;
}

Regards, Daniel

PS: No, don't take this too serious :o)

--
Daniel Frey

aixigo AG - financial training, research and technology
Schloß-Rahe-Straße 15, 52072 Aachen, Germany
fon: +49 (0)241 936737-42, fax: +49 (0)241 936737-99
eMail: [EMAIL PROTECTED], web: http://www.aixigo.de


_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to