Ошибки, баги, вопросы - страница 1569

 
Ruslan Khasanov:
Почему появляется "мусор" при использовании стилизатора?
И зачем вы им пользуетесь? ))
 

Ошибка компиляции (build 1327)

class A { 
public:
        bool operator++( int ) { return false; }
};

void OnStart()
{
        A a;
        while ( a++ ); //'++' - illegal operation use
}
 

Ошибка компиляции

 

class A { public:
template<typename T>        void f( T t );
template<typename T> static void g( T t );
}; 
template<typename T> void A::f( T t ) {}
template<typename T> void A::g( T t ) {}

void OnStart()
{
        A a;
        a.f(  1 ); //нормально
        A::g( 1 ); //'g<int>' - access to non-static member or function
}
 

Ошибка компиляции

class A { public:
        A *operator ++()      { return &this; }
};
template<typename T> void f( T t ) {}
void g( A *a )
{
        f( ++a ); //'A' - declaration without type (1)
        f( a.operator++()); //нормально            (2)
}
Особо отмечу - если поменять(!) местами строки (1) и (2) то все нормально, что требует дополнительной проверки
 
A100:

Ошибка компиляции

Особо отмечу - если поменять(!) местами строки (1) и (2) то все нормально, что требует дополнительной проверки
Правильно ли понимаю, что f(++a) и f(a++) вызывают в Вашем примере разные варианты f?
 
Anton Zverev:
Правильно ли понимаю, что f(++a) и f(a++) вызывают в Вашем примере разные варианты f?

Нет, это ошибка компиляции - то есть до выполнения (конкретных вызовов) еще дело не дошло. Строки (1) и (2) эквивалентны с точки зрения кода (разная запись одного и того же)

Еще приведу пример чтобы не сложилось впечатление что дело исключительно в операторе ++

class A { public:
        A *operator <<( int )      { return &this; }
};
template<typename T> void f( T* t ) {}
void g( A* a )
{
        f( a << 1 ); //'A' - declaration without type
}
 
A100:

Строки (1) и (2) эквивалентны с точки зрения кода (разная запись одного и того же)

++a и a++ все же разные по смыслу. Не находите?
 
Anton Zverev:
++a и a++ все же разные по смыслу. Не находите?
там нет  a++
 

Ошибка компиляции: tree optimization error

#property library

class A { public:
template<typename T> int f( T a, int b, bool c = false );
};
template<typename T>
int A::f( T a, int b, bool c ) { return 0; }

class B : public A {
        virtual void g();
};
void B::g()
{
        f( 0, 0, false ); //нормально
        f( 0, 0 );        //tree optimization error
}

class C {};
void start( C* ) export {}

Поскольку 'tree optimization error' относится к разряду труднолокализуемых, просьба к разработчикам (если есть такая возможность) всю оптимизацию выносить в ключ оптимизации (благо он есть), иначе даже при отключенной оптимизации ранее рабочие программы после обновления build оказываются полностью неработоспособными (а назад вернуться нельзя).

Отмечу что все сегодняшние ошибки не старые, а новые - раньше то (build 1241) все работало
 
A100:
там нет  a++

Верно. Поэтому конкретизировал

Anton Zverev:
Правильно ли понимаю, что f(++a) и f(a++) вызывают в Вашем примере разные варианты f?
Причина обращения: