Ошибки, которые я получаю от clang и g cc для этого примера, более ясны:
typeid.cpp:5:17: error: 'typeid' of incomplete type 'A'
std::string s = typeid(A).name();
^
typeid.cpp:4:7: note: forward declaration of 'A'
class A;
class A
- это предварительное объявление типа A
, поэтому полная информация об этом тип пока не известен. Я подозреваю, что поведение Visual Studio 2012 и 2015 будет считаться нестандартным. Вам нужно перемещать строку до определения class A {...};
, чтобы компилятор мог видеть определение типа.