Boost logo

Boost Users :

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.


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net