Почему myClassObj ++++ не вызывает ошибки компиляции: '++' требует l-значение, как и тип сборки?

Почему myint ++++ хорошо компилируется с компилятором VS2008 и компилятором gcc 3.42 ?? Я ожидал, что компилятор скажет, что нужно lvalue, пример см. Ниже.

struct MyInt
{
    MyInt(int i):m_i(i){}

    MyInt& operator++() //return reference,  return a lvalue
    {
        m_i += 1;
        return *this;
    }

    //operator++ need it's operand to be a modifiable lvalue
    MyInt operator++(int)//return a copy,  return a rvalue
    {
        MyInt tem(*this);
        ++(*this);
        return tem;
    }

    int     m_i;
};

int main()
{
    //control: the buildin type int
    int i(0);
    ++++i;  //compile ok
    //i++++; //compile error :'++' needs l-value, this is expected

    //compare 
    MyInt  myint(1);
    ++++myint;//compile ok
    myint++++;//expecting compiler say need lvalue , but compiled fine !? why ??
}
8
задан Gob00st 14 July 2011 в 10:51
поделиться