I'm experimenting with operator overloading and found something that I cannot explain:
WeekDays.h
using namespace std;
enum DAYS
{
    MON,
    TUE,
    WED,
    THU,
    FRY,
    SAT,
    SUN
};
DAYS operator+(DAYS&a,DAYS &b)
{
    printf("Binary+ called\n");
    return (DAYS)(((unsigned int)a+(unsigned int)b)%7);
}
//Increment 3
DAYS operator+(DAYS&a)
{
    printf("Unary+ called\n");
    return (DAYS)(((unsigned int)a+3)%7);
}
ostream& operator<<(ostream&o, DAYS &a)
{
    switch(a){
    case MON: o<<"MON"; break;
    case TUE: o<<"TUE"; break;
    case WED: o<<"WED"; break;
    case THU: o<<"THU"; break;
    case FRY: o<<"FRY"; break;
    case SAT: o<<"SAT"; break;
    case SUN: o<<"SUN"; break;
    }
    return o;
};
Main.cpp
#include <iostream>
#include "WeekDays.h"
using namespace std;
void main()
{
    DAYS a=MON; //=0
    DAYS b=TUE; //=1
    cout<< +a       <<endl;
    cout<< +b       <<endl;
    cout<< +(a,b)   <<endl;
    cout<< (a+b)    <<endl;
    cin.get();
}
Output is
Unary+ called
3
Unary+ called
4
Unary+ called
4
Binary+ called
1
Why is +(a,b) evaluated as unary operator +b ? I've failed to explain this.
Link to relevant thread Operator overloading . I'm Using VisualStudio 2012.
 
     
     
    