The goal of this project is to provide an interactive template metaprogramming shell.


When one starts learning a new programming language such as Haskell, Python or Erlang an interactive shell (python for Python, ghci for Haskell, erl for Erlang) is available for experimenting with the language. Later, after getting familiar with the language, this shell becomes a tool to try code out, verify test results or learn more about the problem during debugging.

When one starts learning C++ template metaprogramming, he has to use a C++ compiler which was designed to compile code and not to play with template tricks. People new to template metaprogramming have to learn how to make the compiler show them the result of simple metaprograms. This makes it more difficult to get started with template metaprogramming.

Later, after getting familiar with template metaprogramming, developers have to use the compiler for testing and debugging. Understanding what is going on in a template metaprogram during debugging is difficult, since the compiler needs to be forced to present the result of a metaprogram (or a part of it) - and compilers are not prepared for this. This extra difficulty in debugging makes simple problems look difficult.

Metashell provides an interactive shell similar to the Python, Haskell and Erlang shells for template metaprogramming. It uses Clang to evaluate the metaprograms.


Metashell is published under the GNU General Public License, version 3.