On 28 June 2012 17:00, Rick Hodgin wrote:
> I'd like to add an inverse definition to an existing BOOL/bool type, one 
> which the compiler is natively aware of.
>
> Example:
> bool isSystemOpen;
>
> I can reference this in the manner in which it's defined:
> if (isSystemOpen)
> if (!isSystemOpen)
>
> However, there are times when it's more desirable to reference it in the 
> opposite manner as it makes more logical sense to humans.
>
> The compiler is aware of the boolean nature of that variable, so I would like 
> to be able to create a new form which is aware of the inverse boolean 
> condition natively.
>
> Example syntax:
> bool isSystemOpen[.isSystemClosed.];
>
> This new syntax creates one physical variable, and two logical ways to 
> reference the same variable in memory, but always tests for the inverse 
> condition correctly, such as:
> if (isSystemClosed)
>
> Which would be the same logically as:
> if (!isSystemOpen)
>
> Any ideas on how to best / easily implement this? :-)  I had the idea of just 
> writing a pre-processor to look for those references and swap them out with 
> the opposite condition.  But it seems GCC should be able to do this natively.

Why do you want to bother with a non-standard, unportable extension
instead of just writing:

inline bool isSystemClosed()
{ return !isSystemOpen; }

Which is simple, conventional, easy to understand and portable.

Or in C++ just define a suitable type, instead of needing changes to
the core language:

struct inv_bool {
  bool& b;
  operator bool() const { return !b; }
};

inv_bool isSystemClosed = { isSystemOpen };

Reply via email to