/**
 * http://en.cppreference.com/w/cpp/language/operator_precedence
 */

// Prefix increment and decrement
UNARY(PLUS_PLUS, 3)
UNARY(MINUS_MINUS, 3)

// Unary plus and minus 
UNARY(PLUS, 3)
UNARY(MINUS, 3)

// Logical NOT and bitwise NOT
UNARY(TILDE, 3)
UNARY(EXCLAMATION, 3)

// Multiplication, division, and remainder
BINARY(ASTERISK, 5)
BINARY(SLASH, 5)
BINARY(PERCENT, 5)

// Addition and subtraction
BINARY(PLUS, 6)
BINARY(MINUS, 6)

// Bitwise left shift and right shift 
BINARY(LT_LT, 7)
BINARY(GT_GT, 7)

// For relational operators < and ≤ respectively
BINARY(LT, 8)
BINARY(LT_EQUAL, 8)

// For relational operators > and ≥ respectively  
BINARY(GT, 8)
BINARY(GT_EQUAL, 8)

// For relational = and ≠ respectively
BINARY(EQUAL_EQUAL, 9)
BINARY(EXCLAMATION_EQUAL, 9)

// Bitwise AND
BINARY(AMPERSAND, 10)

// Bitwise XOR (exclusive or)
BINARY(CIRCUMFLEX, 11)

// Bitwise OR (inclusive or)
BINARY(PIPE, 12)

// Logical AND
BINARY(AMPERSAND_AMPERSAND, 13)

// Logical OR
BINARY(PIPE_PIPE, 14)

// Assignements
BINARY(EQUAL, 15)
BINARY(PLUS_EQUAL, 15)
BINARY(MINUS_EQUAL, 15)
BINARY(ASTERISK_EQUAL, 15)
BINARY(SLASH_EQUAL, 15)
BINARY(PERCENT_EQUAL, 15)
BINARY(LT_LT_EQUAL, 15)
BINARY(GT_GT_EQUAL, 15)
BINARY(AMPERSAND_EQUAL, 15)
BINARY(CIRCUMFLEX_EQUAL, 15)
BINARY(PIPE_EQUAL, 15)

/**
 * New operators
 */

// ...
