То что нарыл, так то что этот typeid(type).name() платформозависимый.
У виндусятников так понимаю выдаёт тип, т.е. int для целочисленной, название класса для объекта класса (в книжке так).
Так мож этот g++ как раз и правильно компилит? Типа уникальное название что-ли?
Пока тут не будет конкретики не будет и обоснования, вывод на оператор << можно сделать каким угодно, имя класса можно задавать напрямую кстати!!! Если имя не задано, то нет в стандарте обязательств каким образом его показывать.(не платформозависимый, а компиляторозависимый)
Стандарт С++ не описывает то, что будет возвращено typeid(...).name(). Это называется зависимым от реализации (implementation-defined) поведением.
Гарантируется только то, что для выражений с одинаковыми типами строки будут одинаковые. :)
То что нарыл, так то что этот typeid(type).name() платформозависимый.
У виндусятников так понимаю выдаёт тип, т.е. int для целочисленной, название класса для объекта класса (в книжке так).
Так мож этот g++ как раз и правильно компилит? Типа уникальное название что-ли?
class myclass {
// ...
};
Пока тут не будет конкретики не будет и обоснования, вывод на оператор << можно сделать каким угодно, имя класса можно задавать напрямую кстати!!! Если имя не задано, то нет в стандарте обязательств каким образом его показывать.(не платформозависимый, а компиляторозависимый)
Стандарт С++ не описывает то, что будет возвращено typeid(...).name(). Это называется зависимым от реализации (implementation-defined) поведением.
Гарантируется только то, что для выражений с одинаковыми типами строки будут одинаковые. :)
В данном случае гнуь поступает вполне просто: отдаёт искаженные (mangled) имена типов.
Они вполне читаются глазом. :)
Ну а чтобы их раскодировать можно использовать гнусное расширение abi::__cxa_demangle.
см. g++ ext_demangling
typeid() returns extra characters in g++
Getting incorrect class name when using typeid
Понял, спасибо.
Отправить комментарий