I needed to compile Crypto++ (a very good cryptography library which uses RTTI) but my client requested that we leave out RTTI information to make reverse-engineering of the resulting product more difficult. Here’s how I managed to fake RTTI good enough to get Crypto++ to compile.
1. redefine typeid() 
In cryptlib.h, I added directly after the initial
1 
2 
#include   "config.h" 
#include   "stdcpp.h" 
 
the following template and define to revert typeid() to my own implementation:
1 
2 
template < typename   T >   const   std :: type_info &   HajoTypeID ( void ); 
#define typeid(a) HajoTypeID<a>() 
 
2. compile to get list of undefined symbols 
I then compiled Crypto++ and was greeted with a huge list of undefined symbols, which were references to my HajoTypeID<>() template function. The errors looked like:
1 
2 
3 
"__Z10HajoTypeIDIN8CryptoPP21InvertibleLUCFunctionEERKSt9type_infov", referenced from:
   __ZNK8CryptoPP14NameValuePairs13GetThisObjectINS_21InvertibleLUCFunctionEEEbRT_ in libCryptoPP.a(luc.o)
   __ZNK8CryptoPP14NameValuePairs8GetValueINS_21InvertibleLUCFunctionEEEbPKcRT_ in libCryptoPP.a(luc.o) 
 
I copied all of those into undefined.txt and ran
1 
 cat  undefined.txt  |   grep  "\", referenced"   |   sed  's/"_//'   |   sed  's/",.*//'   |   mate
 
to get a list of the raw, mangled symbols that were missing. The output looked like this:
1 
2 
3 
 _Z10HajoTypeIDIPKhERKSt9type_infov
_Z10HajoTypeIDIPhERKSt9type_infov
 _Z10HajoTypeIDIPSsERKSt9type_infov
 
 
3. demangle symbols to get needed template classes 
I then piped the result through the Javascript from
1 
 http://slush.warosu.org/c++filtjs/
 
to get a list of the needed, unmangled symbols like this:
1 
2 
3 
std :: type_info   const &   HajoTypeID < int > () 
std :: type_info   const &   HajoTypeID < char   const *> () 
std :: type_info   const &   HajoTypeID < std :: ostream *> () 
 
I stored this list into defineme.txt and ran
1 
 cat  defineme.txt  |   sed  's/std::type_info const& HajoTypeID<//'   |   sed  's/>()//'    |   sed  's/^.*$/template <> const std::type_info\& HajoTypeID< & >(void) { static HajoMkType type("&"); return type; }/'   |   mate
 
to get the needed C++ source to fake typeid(..) for those classes. The output looks like this:
1 
2 
3 
template   <>   const   std :: type_info &   HajoTypeID <   int   > ( void )   {   static   HajoMkType   type ( "int" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   char   const *   > ( void )   {   static   HajoMkType   type ( "char const*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   std :: ostream *   > ( void )   {   static   HajoMkType   type ( "std::ostream*" );   return   type ;   } 
 
and together with this class:
1 
2 
3 
4 
5 
class   HajoMkType   :   public   std :: type_info   { 
public : 
     inline   HajoMkType ( const   char *   name )   :   std :: type_info ( name )   {} 
     inline   virtual   ~ HajoMkType ()   {} 
}; 
 
can fake RTTI good enough such that the compiled Crypto++ library passes all validations with RTTI disabled.
My fake RTTI source 
in cryptlib.h
1 
2 
template < typename   T >   const   std :: type_info &   HajoTypeID ( void ); 
#define typeid(a) HajoTypeID<a>() 
 
in a C++ file of your choice
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
58 
59 
60 
61 
62 
63 
64 
65 
66 
67 
68 
69 
70 
71 
72 
73 
74 
75 
76 
77 
78 
79 
80 
81 
82 
83 
84 
85 
86 
87 
88 
89 
90 
91 
92 
93 
94 
95 
96 
97 
98 
99 
100 
101 
102 
103 
104 
105 
106 
107 
108 
109 
110 
111 
112 
113 
114 
115 
116 
117 
118 
119 
120 
121 
122 
123 
124 
125 
126 
127 
128 
129 
130 
#include   "eccrypto.h" 
#include   "ec2n.h" 
#include   "luc.h" 
#include   "esign.h" 
#include   "rabin.h" 
#include   "gfpcrypt.h" 
#include   "modexppc.h" 
#include   "xtrcrypt.h" 
 // fake RTTI data holder 
class   HajoMkType   :   public   std :: type_info   { 
public : 
     inline   HajoMkType ( const   char *   name )   :   std :: type_info ( name )   {} 
     inline   virtual   ~ HajoMkType ()   {} 
}; 
 
 
 template   <>   const   std :: type_info &   HajoTypeID <   int   > ( void )   {   static   HajoMkType   type ( "int" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   char   const *   > ( void )   {   static   HajoMkType   type ( "char const*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   std :: ostream *   > ( void )   {   static   HajoMkType   type ( "std::ostream*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   int   const *   > ( void )   {   static   HajoMkType   type ( "int const*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   unsigned   char   > ( void )   {   static   HajoMkType   type ( "unsigned char" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: ConstByteArrayParameter   > ( void )   {   static   HajoMkType   type ( "CryptoPP::ConstByteArrayParameter" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   unsigned   char   const *   > ( void )   {   static   HajoMkType   type ( "unsigned char const*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   unsigned   char *   > ( void )   {   static   HajoMkType   type ( "unsigned char*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   std :: string *   > ( void )   {   static   HajoMkType   type ( "std::string*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters_IntegerBasedImpl < CryptoPP :: ModExpPrecomputation ,   CryptoPP :: DL_FixedBasePrecomputationImpl < CryptoPP :: Integer >   >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters_IntegerBasedImpl<CryptoPP::ModExpPrecomputation, CryptoPP::DL_FixedBasePrecomputationImpl<CryptoPP::Integer> > " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PublicKeyImpl < CryptoPP :: DL_GroupParameters_DSA >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PublicKeyImpl<CryptoPP::DL_GroupParameters_DSA> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PrivateKey < CryptoPP :: Integer >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PrivateKey<CryptoPP::Integer> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PrivateKey < CryptoPP :: Integer >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PrivateKey<CryptoPP::Integer>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PublicKey < CryptoPP :: Integer >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PublicKey<CryptoPP::Integer> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: Integer   > ( void )   {   static   HajoMkType   type ( "CryptoPP::Integer" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PrivateKeyImpl < CryptoPP :: DL_GroupParameters_DSA >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PrivateKeyImpl<CryptoPP::DL_GroupParameters_DSA> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters_DSA   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters_DSA" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: OID   > ( void )   {   static   HajoMkType   type ( "CryptoPP::OID" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: ECP   > ( void )   {   static   HajoMkType   type ( "CryptoPP::ECP" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: ECPPoint   > ( void )   {   static   HajoMkType   type ( "CryptoPP::ECPPoint" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: EC2N   > ( void )   {   static   HajoMkType   type ( "CryptoPP::EC2N" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: EC2NPoint   > ( void )   {   static   HajoMkType   type ( "CryptoPP::EC2NPoint" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PublicKeyImpl < CryptoPP :: DL_GroupParameters_EC < CryptoPP :: ECP >   >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PublicKeyImpl<CryptoPP::DL_GroupParameters_EC<CryptoPP::ECP> > " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PrivateKey < CryptoPP :: ECPPoint >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PrivateKey<CryptoPP::ECPPoint> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PrivateKey < CryptoPP :: ECPPoint >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PrivateKey<CryptoPP::ECPPoint>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PublicKey < CryptoPP :: ECPPoint >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PublicKey<CryptoPP::ECPPoint> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PublicKeyImpl < CryptoPP :: DL_GroupParameters_EC < CryptoPP :: EC2N >   >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PublicKeyImpl<CryptoPP::DL_GroupParameters_EC<CryptoPP::EC2N> > " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PrivateKey < CryptoPP :: EC2NPoint >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PrivateKey<CryptoPP::EC2NPoint> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PrivateKey < CryptoPP :: EC2NPoint >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PrivateKey<CryptoPP::EC2NPoint>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PublicKey < CryptoPP :: EC2NPoint >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PublicKey<CryptoPP::EC2NPoint> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PrivateKeyImpl < CryptoPP :: DL_GroupParameters_EC < CryptoPP :: ECP >   >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PrivateKeyImpl<CryptoPP::DL_GroupParameters_EC<CryptoPP::ECP> > " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters_EC < CryptoPP :: ECP >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters_EC<CryptoPP::ECP> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PrivateKeyImpl < CryptoPP :: DL_GroupParameters_EC < CryptoPP :: EC2N >   >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PrivateKeyImpl<CryptoPP::DL_GroupParameters_EC<CryptoPP::EC2N> > " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters_EC < CryptoPP :: EC2N >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters_EC<CryptoPP::EC2N> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   std :: string   > ( void )   {   static   HajoMkType   type ( "std::string" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters_GFP   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters_GFP" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters_IntegerBased   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters_IntegerBased" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters_GFP *   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters_GFP*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters < CryptoPP :: Integer >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters<CryptoPP::Integer> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters < CryptoPP :: Integer >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters<CryptoPP::Integer>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters_IntegerBasedImpl < CryptoPP :: ModExpPrecomputation ,   CryptoPP :: DL_FixedBasePrecomputationImpl < CryptoPP :: Integer >   >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters_IntegerBasedImpl<CryptoPP::ModExpPrecomputation, CryptoPP::DL_FixedBasePrecomputationImpl<CryptoPP::Integer> >*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PublicKeyImpl < CryptoPP :: DL_GroupParameters_DSA >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PublicKeyImpl<CryptoPP::DL_GroupParameters_DSA>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PublicKey < CryptoPP :: Integer >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PublicKey<CryptoPP::Integer>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PrivateKeyImpl < CryptoPP :: DL_GroupParameters_DSA >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PrivateKeyImpl<CryptoPP::DL_GroupParameters_DSA>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters < CryptoPP :: ECPPoint >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters<CryptoPP::ECPPoint> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters < CryptoPP :: ECPPoint >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters<CryptoPP::ECPPoint>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters_EC < CryptoPP :: ECP >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters_EC<CryptoPP::ECP>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters < CryptoPP :: EC2NPoint >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters<CryptoPP::EC2NPoint> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters < CryptoPP :: EC2NPoint >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters<CryptoPP::EC2NPoint>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters_EC < CryptoPP :: EC2N >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters_EC<CryptoPP::EC2N>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PublicKeyImpl < CryptoPP :: DL_GroupParameters_EC < CryptoPP :: ECP >   >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PublicKeyImpl<CryptoPP::DL_GroupParameters_EC<CryptoPP::ECP> >*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PublicKey < CryptoPP :: ECPPoint >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PublicKey<CryptoPP::ECPPoint>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PublicKeyImpl < CryptoPP :: DL_GroupParameters_EC < CryptoPP :: EC2N >   >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PublicKeyImpl<CryptoPP::DL_GroupParameters_EC<CryptoPP::EC2N> >*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PublicKey < CryptoPP :: EC2NPoint >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PublicKey<CryptoPP::EC2NPoint>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PrivateKeyImpl < CryptoPP :: DL_GroupParameters_EC < CryptoPP :: ECP >   >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PrivateKeyImpl<CryptoPP::DL_GroupParameters_EC<CryptoPP::ECP> >*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PrivateKeyImpl < CryptoPP :: DL_GroupParameters_EC < CryptoPP :: EC2N >   >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PrivateKeyImpl<CryptoPP::DL_GroupParameters_EC<CryptoPP::EC2N> >*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: ESIGNFunction   > ( void )   {   static   HajoMkType   type ( "CryptoPP::ESIGNFunction" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: InvertibleESIGNFunction   > ( void )   {   static   HajoMkType   type ( "CryptoPP::InvertibleESIGNFunction" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: ESIGNFunction *   > ( void )   {   static   HajoMkType   type ( "CryptoPP::ESIGNFunction*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: InvertibleESIGNFunction *   > ( void )   {   static   HajoMkType   type ( "CryptoPP::InvertibleESIGNFunction*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   wchar_t   const *   > ( void )   {   static   HajoMkType   type ( "wchar_t const*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   std :: istream *   > ( void )   {   static   HajoMkType   type ( "std::istream*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: ByteArrayParameter   > ( void )   {   static   HajoMkType   type ( "CryptoPP::ByteArrayParameter" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: BufferedTransformation *   > ( void )   {   static   HajoMkType   type ( "CryptoPP::BufferedTransformation*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: RandomNumberGenerator *   > ( void )   {   static   HajoMkType   type ( "CryptoPP::RandomNumberGenerator*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: BlockPaddingSchemeDef :: BlockPaddingScheme   > ( void )   {   static   HajoMkType   type ( "CryptoPP::BlockPaddingSchemeDef::BlockPaddingScheme" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   bool   > ( void )   {   static   HajoMkType   type ( "bool" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   unsigned   int   > ( void )   {   static   HajoMkType   type ( "unsigned int" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters_IntegerBased *   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters_IntegerBased*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: Integer :: RandomNumberType   > ( void )   {   static   HajoMkType   type ( "CryptoPP::Integer::RandomNumberType" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: PrimeSelector   const *   > ( void )   {   static   HajoMkType   type ( "CryptoPP::PrimeSelector const*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: LUCFunction   > ( void )   {   static   HajoMkType   type ( "CryptoPP::LUCFunction" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: InvertibleLUCFunction   > ( void )   {   static   HajoMkType   type ( "CryptoPP::InvertibleLUCFunction" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: LUCFunction *   > ( void )   {   static   HajoMkType   type ( "CryptoPP::LUCFunction*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: InvertibleLUCFunction *   > ( void )   {   static   HajoMkType   type ( "CryptoPP::InvertibleLUCFunction*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: RabinFunction   > ( void )   {   static   HajoMkType   type ( "CryptoPP::RabinFunction" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: InvertibleRabinFunction   > ( void )   {   static   HajoMkType   type ( "CryptoPP::InvertibleRabinFunction" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: RabinFunction *   > ( void )   {   static   HajoMkType   type ( "CryptoPP::RabinFunction*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: InvertibleRabinFunction *   > ( void )   {   static   HajoMkType   type ( "CryptoPP::InvertibleRabinFunction*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PublicKeyImpl < CryptoPP :: DL_GroupParameters_GFP_DefaultSafePrime >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PublicKeyImpl<CryptoPP::DL_GroupParameters_GFP_DefaultSafePrime> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PrivateKeyImpl < CryptoPP :: DL_GroupParameters_GFP_DefaultSafePrime >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PrivateKeyImpl<CryptoPP::DL_GroupParameters_GFP_DefaultSafePrime> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters_GFP_DefaultSafePrime   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters_GFP_DefaultSafePrime" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PrivateKeyImpl < CryptoPP :: DL_GroupParameters_GFP >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PrivateKeyImpl<CryptoPP::DL_GroupParameters_GFP> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PublicKeyImpl < CryptoPP :: DL_GroupParameters_GFP >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PublicKeyImpl<CryptoPP::DL_GroupParameters_GFP> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PublicKeyImpl < CryptoPP :: DL_GroupParameters_GFP_DefaultSafePrime >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PublicKeyImpl<CryptoPP::DL_GroupParameters_GFP_DefaultSafePrime>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PrivateKeyImpl < CryptoPP :: DL_GroupParameters_GFP_DefaultSafePrime >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PrivateKeyImpl<CryptoPP::DL_GroupParameters_GFP_DefaultSafePrime>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PrivateKeyImpl < CryptoPP :: DL_GroupParameters_GFP >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PrivateKeyImpl<CryptoPP::DL_GroupParameters_GFP>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PublicKeyImpl < CryptoPP :: DL_GroupParameters_GFP >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PublicKeyImpl<CryptoPP::DL_GroupParameters_GFP>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: RSAFunction   > ( void )   {   static   HajoMkType   type ( "CryptoPP::RSAFunction" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: InvertibleRSAFunction   > ( void )   {   static   HajoMkType   type ( "CryptoPP::InvertibleRSAFunction" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: RSAFunction *   > ( void )   {   static   HajoMkType   type ( "CryptoPP::RSAFunction*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: InvertibleRSAFunction *   > ( void )   {   static   HajoMkType   type ( "CryptoPP::InvertibleRSAFunction*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: RWFunction   > ( void )   {   static   HajoMkType   type ( "CryptoPP::RWFunction" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: InvertibleRWFunction   > ( void )   {   static   HajoMkType   type ( "CryptoPP::InvertibleRWFunction" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: RWFunction *   > ( void )   {   static   HajoMkType   type ( "CryptoPP::RWFunction*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: InvertibleRWFunction *   > ( void )   {   static   HajoMkType   type ( "CryptoPP::InvertibleRWFunction*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters_IntegerBasedImpl < CryptoPP :: DL_GroupPrecomputation_LUC ,   CryptoPP :: DL_BasePrecomputation_LUC >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters_IntegerBasedImpl<CryptoPP::DL_GroupPrecomputation_LUC, CryptoPP::DL_BasePrecomputation_LUC> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PublicKeyImpl < CryptoPP :: DL_GroupParameters_LUC >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PublicKeyImpl<CryptoPP::DL_GroupParameters_LUC> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PrivateKeyImpl < CryptoPP :: DL_GroupParameters_LUC >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PrivateKeyImpl<CryptoPP::DL_GroupParameters_LUC> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters_LUC   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters_LUC" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PublicKeyImpl < CryptoPP :: DL_GroupParameters_LUC_DefaultSafePrime >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PublicKeyImpl<CryptoPP::DL_GroupParameters_LUC_DefaultSafePrime> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PrivateKeyImpl < CryptoPP :: DL_GroupParameters_LUC_DefaultSafePrime >    > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PrivateKeyImpl<CryptoPP::DL_GroupParameters_LUC_DefaultSafePrime> " );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters_LUC_DefaultSafePrime   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters_LUC_DefaultSafePrime" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters_LUC *   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters_LUC*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_GroupParameters_IntegerBasedImpl < CryptoPP :: DL_GroupPrecomputation_LUC ,   CryptoPP :: DL_BasePrecomputation_LUC >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_GroupParameters_IntegerBasedImpl<CryptoPP::DL_GroupPrecomputation_LUC, CryptoPP::DL_BasePrecomputation_LUC>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PublicKeyImpl < CryptoPP :: DL_GroupParameters_LUC >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PublicKeyImpl<CryptoPP::DL_GroupParameters_LUC>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PrivateKeyImpl < CryptoPP :: DL_GroupParameters_LUC >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PrivateKeyImpl<CryptoPP::DL_GroupParameters_LUC>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PublicKeyImpl < CryptoPP :: DL_GroupParameters_LUC_DefaultSafePrime >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PublicKeyImpl<CryptoPP::DL_GroupParameters_LUC_DefaultSafePrime>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: DL_PrivateKeyImpl < CryptoPP :: DL_GroupParameters_LUC_DefaultSafePrime >*   > ( void )   {   static   HajoMkType   type ( "CryptoPP::DL_PrivateKeyImpl<CryptoPP::DL_GroupParameters_LUC_DefaultSafePrime>*" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: XTR_DH   > ( void )   {   static   HajoMkType   type ( "CryptoPP::XTR_DH" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: GFP2Element   > ( void )   {   static   HajoMkType   type ( "CryptoPP::GFP2Element" );   return   type ;   } 
template   <>   const   std :: type_info &   HajoTypeID <   CryptoPP :: XTR_DH *   > ( void )   {   static   HajoMkType   type ( "CryptoPP::XTR_DH*" );   return   type ;   }