Я делаю библиотеку C ++, которая в значительной степени опирается на RTTI (настраиваемый мост на другой язык) и очень смущена типом строкового литерала.
Это простой тест, который я сделал, чтобы показать проблему:
std::cout << typeid(const char*).name() << std::endl; // PKc
std::cout << std::any("").type().name() << std::endl; // PKc
std::cout << typeid("").name() << std::endl; // A1_c
Для меня это выглядит как первые два типа печати для const char*
, но последний является массивом.
Почему результаты для std::any("").type()
и typeid("")
отличаются? Есть ли способ получить первое поведение, то есть сделать результаты для строковых литералов непротиворечивыми (я использую идентификацию типа для вызова различных обработчиков типов)?
P.S .: тесты выполняются с использованием Clang версии 8.0.0-3 (tags / RELEASE_800 / final) в Ubuntu 19.04.