title: How do boost::variant and boost::any work?
body: <p>How do variant and any from the boost library work internally? In a project I am working on, I currently use a tagged union. I want to use something else, because unions in C++ don't let you use objects with constructors, destructors or overloaded assignment operators.</p>
  
  <p>I queried the size of any and variant, and did some experiments with them. In my platform, variant takes the size of its longest possible type plus 8 bytes: I think it my just be 8 bytes o type information and the rest being the stored value. On the other hand, any just takes 8 bytes. Since i'm on a 64-bit platform, I guess any just holds a pointer.</p>
  
  <p>How does Any know what type it holds? How does Variant achieve what it does through templates? I would like to know more about these classes before using them.</p>