Imperative way: #include <boost/mpl/or.hpp> #include <boost/mpl/assert.hpp> #include <boost/type_traits/is_same.hpp> template <class T> struct myClass { BOOST_MPL_ASSERT((boost::mpl::or_< boost::is_same<T,int> , boost::is_same<T,float> , boost::is_same<T,char> >)); ... // your class implementation here. };to summarize my question, is there any way i can restrict the compiler to accept only few type names for my templated class (i.e., using standard c++ or boost)HTH,