New base<> implementation without boost::mpl