Errores, fallos, preguntas - página 1569

 
Ruslan Khasanov:
¿Por qué aparece la "basura" cuando se utiliza un estilista?
¿Y por qué lo usas? ))
 

Error de compilación (build 1327)

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

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

Error de compilación

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
}
 

Error de compilación

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)
}
Nota especial: si se intercambian las líneas (1) y (2) no pasa nada, lo que requiere una comprobación adicional
 
A100:

Error de compilación

Me gustaría señalar especialmente que si se intercambian las líneas (1) y (2), todo está bien, lo que requiere una comprobación adicional
¿He entendido bien que f(++a) y f(a++) provocan diferentes variantes de f en tu ejemplo?
 
Anton Zverev:
¿He entendido bien que f(++a) y f(a++) provocan diferentes variantes de f en su muestra?

No, se trata de un error de compilación, es decir, aún no se ha llegado a la ejecución (llamadas específicas). Las cadenas (1) y (2) son equivalentes desde el punto de vista del código (escritura diferente de lo mismo)

Aquí hay otra muestra para que no tenga la impresión de que se trata sólo del operador ++

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:

Las líneas (1) y (2) son equivalentes en términos de código (escritura diferente de lo mismo)

Sin embargo, ++a y a++ tienen un significado diferente. ¿No crees?
 
Anton Zverev:
Al fin y al cabo, ++a y a++ tienen un significado diferente. ¿No crees?
no hay a++
 

Error de compilación: error de optimización del árbol

#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 {}

Como el"error de optimización del árbol" no es fácil de localizar, pido a los desarrolladores (si tienen esa posibilidad) que pongan toda la optimización en la clave de optimización (gracias a Dios que existe), de lo contrario, incluso con la optimización desactivada los programas que funcionan resultan estar totalmente desactivados después de la actualización de la compilación (y es imposible volver atrás).

Tenga en cuenta que todos los errores de hoy no son antiguos, sino nuevos - antes (build 1241) todo funcionaba
 
A100:
no hay a++

Sí. Por eso lo hice más específico.

Anton Zverev:
¿He entendido bien que f(++a) y f(a++) provocan diferentes variantes de f en tu ejemplo?