stract types (i.e., classes
      with one or more pure virtual functions) generates a compiler error. This can
      be avoided by manipulating the type adding and removing a reference to it.
    </p><p>
      Let's program a macro that performs a static assertion on a <a href="http://en.wikipedia.org/wiki/Template_metaprogramming" target="_top">Template
      Meta-Programming</a> (TMP) meta-function (similarly to Boost.MPL <a href="http://www.boost.org/doc/libs/1_36_0/libs/mpl/doc/refmanual/assert.html" t