
Hi, In C++ Template Metaprogramming chapter 4, item 4.1.2. Lazy Type Selection typename is_scalar<T>::type and is_scalar<T> can be used interchangeably as in the example below: template <class T> struct param_type : mpl::eval_if< typename boost::is_scalar<T>::type , mpl::identity<T> , boost::add_reference<T const> > // no ::type here {}; template <class T> struct param_type : mpl::eval_if< boost::is_scalar<T> , mpl::identity<T> , boost::add_reference<T const> > {}; I'm still trying to figure out the reason why. I understand that to invoke a metafunction you have to reach into its nested ::type member and I also know that integral constant wrappers have a ::value member. Any help would be greatly appreciated Regards, Eduardo