class A { public:
template<typename T> void f( T t );
template<typename T> staticvoid g( T t );
};
template<typename T> void A::f( T t ) {}
template<typename T> void A::g( T t ) {}
voidOnStart()
{
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)
}
Nota speciale - se si scambiano(!) le linee (1) e (2) va bene, il che richiede un ulteriore controllo
Anton Zverev: Ho capito bene che f(++a) e f(a++) causano diverse varianti di f nel vostro campione?
No, questo è un errore di compilazione - cioè non è ancora arrivato all'esecuzione (chiamate specifiche). Le stringhe (1) e (2) sono equivalenti dal punto di vista del codice (scrittura diversa della stessa cosa)
Ecco un altro esempio per non dare l'impressione che si tratti solo dell'operatore ++
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
}
#property libraryclass 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 ) { return0; }
class B : public A {
virtualvoid g();
};
void B::g()
{
f( 0, 0, false ); //нормально
f( 0, 0 ); //tree optimization error
}
class C {};
void start( C* ) export {}
Poiché"l'errore di ottimizzazione dell'albero" non è facile da localizzare, chiedo agli sviluppatori (se hanno questa possibilità) di mettere tutte le ottimizzazioni nella chiave di ottimizzazione (grazie a Dio esiste), altrimenti anche con l'ottimizzazione disabilitata i programmi funzionanti risultano essere completamente disabilitati dopo l'aggiornamento della build (ed è impossibile tornare indietro).
Notate che tutti gli errori di oggi non sono vecchi, ma nuovi - prima (build 1241)tutto funzionava
Perché appare "spazzatura" quando si usa uno styler?
Errore di compilazione (build 1327)
Errore di compilazione
Errore di compilazione
Nota speciale - se si scambiano(!) le linee (1) e (2) va bene, il che richiede un ulteriore controlloErrore di compilazione
Vorrei soprattutto notare che se si scambiano(!) le linee (1) e (2), tutto va bene, il che richiede un ulteriore controlloHo capito bene che f(++a) e f(a++) causano diverse varianti di f nel vostro campione?
No, questo è un errore di compilazione - cioè non è ancora arrivato all'esecuzione (chiamate specifiche). Le stringhe (1) e (2) sono equivalenti dal punto di vista del codice (scrittura diversa della stessa cosa)
Ecco un altro esempio per non dare l'impressione che si tratti solo dell'operatore ++
Le linee (1) e (2) sono equivalenti in termini di codice (scrittura diversa della stessa cosa)
++a e a++ sono, dopo tutto, di significato diverso. Non credete?
Errore di compilazione: errore di ottimizzazione dell'albero
Poiché"l'errore di ottimizzazione dell'albero" non è facile da localizzare, chiedo agli sviluppatori (se hanno questa possibilità) di mettere tutte le ottimizzazioni nella chiave di ottimizzazione (grazie a Dio esiste), altrimenti anche con l'ottimizzazione disabilitata i programmi funzionanti risultano essere completamente disabilitati dopo l'aggiornamento della build (ed è impossibile tornare indietro).
Notate che tutti gli errori di oggi non sono vecchi, ma nuovi - prima (build 1241) tutto funzionavanon c'è nessun a++
Giusto. Ecco perché ho specificato
Ho capito bene che f(++a) e f(a++) causano diverse varianti di f nel tuo esempio?