Boost
C++ Libraries
...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
This version of Boost is under active development. You are currently in the develop branch. The current version is 1.90.0.
TypeIndex has been tested and successfully work on many compilers.
![]() |
Warning |
|---|---|
|
With RTTI off classes with exactly the same names defined in different modules in anonymous namespaces may collapse: // In A.cpp namespace { struct user_defined{}; } type_index foo_a() { return type_id<user_defined>(); } // In B.cpp namespace { struct user_defined{}; } type_index foo_b() { return type_id<user_defined>(); } // In main.cpp assert(foo_a() != foo_b()); // will fail on some compilers Compilers that have that limitation: GCC, CLANG, Intel.
Test: you can test this issue by runing
the |
If you get the following error during compilation
TypeIndex library could not detect your compiler. Please make the BOOST_TYPE_INDEX_FUNCTION_SIGNATURE macro use correct compiler macro for getting the whole function name. Define BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING to correct value after that.
then you are using a compiler that was not tested with this library.
BOOST_TYPE_INDEX_FUNCTION_SIGNATURE
must be defined to a compiler specific macro, that outputs the whole function signature including template parameters.
If the output of boost::typeindex::ctti_type_index::type_id<int>().pretty_name()
int but
also a lot of text around the int
then you are using a compiler that was not tested with this library and you
need to setup the BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING
macro.
Here is a short instruction:
boost::typeindex::ctti_type_index::type_id<int>().pretty_name()
BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING
to (skip_at_begin, skip_at_end, false, ""), where
skip_at_begin is
equal to characters count before the first occurrence of int in output
skip_at_end is
equal to characters count after last occurrence of int in output
boost::typeindex::ctti_type_index::type_id<int>().name_demangled()
returns "int"
int,
then define BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING to (skip_at_begin, skip_at_end, true, "T = "), where
skip_at_begin is
equal to skip_at_begin
at step 2
skip_at_end is
equal to skip_at_end
at step 2
"T = " is
equal to characters that are right before the int
in output
BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING
macro.
Consider the following example:
boost::typeindex::ctti_type_index::type_id<int>().raw_name()
returns "const char *__cdecl boost::detail::ctti<int>::n(void)".
Then you shall set skip_at_begin
to sizeof("const char *__cdecl boost::detail::ctti<") - 1
and skip_at_end to sizeof(">::n(void)") - 1.
#define BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING (39, 6, false, "")
Another example:
boost::typeindex::ctti_type_index::type_id<int>().raw_name()
returns "static const char *boost::detail::ctti<int>::n() [T =
int]"". Then you shall set skip_at_begin
to sizeof("static const char *boost::detail::ctti<") - 1
and skip_at_end to sizeof("]") - 1
and last parameter of macro to "T = ".
#define BOOST_TYPE_INDEX_CTTI_USER_DEFINED_PARSING (39, 1, true, "T = ")