|  | Home | Libraries | People | FAQ | More | 
TypeIndex has been tested and successfully work on many compilers.
| ![[Warning]](../../../doc/src/images/warning.png) | 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>().name()
        * returns not just int but also
        a lot of text around the int
        * or does not return type at all 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>().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 = ")