Mi sono perso il motivo per cui Clang rifiuta il seguente codice:Clang rifiutare type_info come incompleto anche se <typeinfo> è incluso
#include <typeinfo>
#include <exception>
const char* get_name(const std::exception_ptr eptr)
{
return eptr.__cxa_exception_type()->name();
}
int main() {}
E 'OK con GCC, ma Clang lamenta type_info
essere un tipo incompleto:
$ g++-4.7 -std=c++0x -O3 -Wall -Wextra t.cc -o t
$ clang++-3.2 -std=c++0x -O3 -Wall -Wextra t.cc -o t
t.cc:6:37: error: member access into incomplete type 'const class type_info'
return eptr.__cxa_exception_type()->name();
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/exception_ptr.h:144:19: note: forward declaration of
'std::__exception_ptr::type_info'
const class type_info*
^
1 error generated.
$
Domanda: Come posso risolvere il problema con Clang? O mi sto perdendo qualcosa e Clang ha ragione nel rifiutare il codice?
Hai problema non con 'std :: type_info' ma con' std :: __ exception_ptr :: type_info', che sembra essere specifici per gcc. –
Stai utilizzando funzioni non standard, cosa ti aspetti? – Pubby
Non sto usando libC++, ma libstdC++ (come puoi vedere dal percorso nel messaggio di errore). E 'std :: __ exception_ptr :: type_info' è in realtà una dichiarazione avanzata creata in modo errato perché Clang non sembra raccogliere' std :: type_info' dato che puoi controllare l'intestazione del messaggio di errore. E non standard ... beh ... il mondo reale non è perfetto. Fa parte del codice base che sto trasmettendo a Clang. Speravo solo in aiuto costruttivo. –