$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [Boost-users] add_const_ref type transformation metafct
From: John Maddock (john_at_[hidden])
Date: 2009-04-04 07:32:16
> I wish to have a metafct that adds "const &" to types that have it or 
> don't
> have it...
>
> template< typename T >
> struct add_const_ref {
>  typedef typename boost::remove_const<T>::type      t1;
>  typedef typename boost::add_const<t1>::type        t2;
>  typedef typename boost::add_reference<t2>::type    type;
> };
>
> Does this exist already in type traits or elsewhere? I couldn't find....
> Can this be improved in terms of reducing the number of tmpl 
> instantiations?
You don't need the remove_const<> in there - add_const has no effect if the 
type is already const.
The open question is what do you want to have happen if the argument is a 
reference to a non-const type?  If you want the result to be a const 
reference then:
template< typename T >
struct add_const_ref {
  typedef typename boost::remove_reference<T>::type      t1;
  typedef typename boost::add_const<t1>::type        t2;
  typedef typename boost::add_reference<t2>::type    type;
};
HTH, John.