I was using boost :: mpl until now has been switched to TMP library of self-made