RE: An internal add_const_reference type trait

2008-06-10 Thread Travis Vitek
 

Eric Lemings wrote:
>
>Travis Vitek wrote:
>> 
>> >Eric Lemings wrote:
>> >
>> >Travis,
>> >
>> >According to our plans for type traits, is this how you 
>> would define an
>> >internal class template that combines the add_const and
>> >add_reference type modifiers?
>> >
>> >#include 
>> >
>> >_RWSTD_NAMESPACE (__rw) {
>> >
>> >template 
>> >class __rw_add_const_ref
>> >{
>> >typedef _TYPENAME __rw_add_const<_TypeT>::type  _ConstT;
>> >
>> >public:
>> >
>> >typedef _TYPENAME __rw_add_reference<_ConstT>::type type;
>> >};
>> >
>> >}   // namespace __rw
>> >
>> 
>> It is really close. I'd probably make it a struct and if 
>there was any
>> complicated logic it would move into an impl struct to reduce 
>> clutter in
>> the outer class.
>> 
>> If you need the above trait, I should let you know that TR1 had
>> add_reference, but C++0x replaces that with add_lvalue_reference and
>> add_rvalue_reference. So it you should probably use the new 
>> names as we
>> probably won't have an __rw_add_reference trait.
>> 
>>  #include 
>> 
>>  _RWSTD_NAMESPACE (__rw) {
>> 
>>  template 
>>  struct __rw_add_const_ref
>>  {
>>  typedef _TYPENAME __rw_add_lval_ref<
>>   _TYPENAME __rw_add_const<_TypeT>::type
>>   >::type type;
>>  };
>> 
>>  }   // namespace __rw
>
>Actually, wouldn't this be even better?
>
>   template 
>   struct __rw_add_const_ref
>   : __rw_add_lval_ref<_RWSTD_ADD_CONST(_TypeT)> { };
>

Ah yes, assuming that I continue to provide the macros. :)


>Brad.
>


RE: An internal add_const_reference type trait

2008-06-10 Thread Eric Lemings
 

> -Original Message-
> From: Travis Vitek [mailto:[EMAIL PROTECTED] 
> Sent: Tuesday, June 10, 2008 10:34 AM
> To: dev@stdcxx.apache.org
> Subject: RE: An internal add_const_reference type trait
> 
>  
> 
> >Eric Lemings wrote:
> >
> >Travis,
> >
> >According to our plans for type traits, is this how you 
> would define an
> >internal class template that combines the add_const and
> >add_reference type modifiers?
> >
> > #include 
> >
> > _RWSTD_NAMESPACE (__rw) {
> >
> > template 
> > class __rw_add_const_ref
> > {
> > typedef _TYPENAME __rw_add_const<_TypeT>::type  _ConstT;
> >
> > public:
> >
> > typedef _TYPENAME __rw_add_reference<_ConstT>::type type;
> > };
> >
> > }   // namespace __rw
> >
> 
> It is really close. I'd probably make it a struct and if there was any
> complicated logic it would move into an impl struct to reduce 
> clutter in
> the outer class.
> 
> If you need the above trait, I should let you know that TR1 had
> add_reference, but C++0x replaces that with add_lvalue_reference and
> add_rvalue_reference. So it you should probably use the new 
> names as we
> probably won't have an __rw_add_reference trait.
> 
>   #include 
> 
>   _RWSTD_NAMESPACE (__rw) {
> 
>   template 
>   struct __rw_add_const_ref
>   {
>   typedef _TYPENAME __rw_add_lval_ref<
>   _TYPENAME __rw_add_const<_TypeT>::type
>   >::type type;
>   };
> 
>   }   // namespace __rw

Actually, wouldn't this be even better?

template 
struct __rw_add_const_ref
: __rw_add_lval_ref<_RWSTD_ADD_CONST(_TypeT)> { };

Brad.


RE: An internal add_const_reference type trait

2008-06-10 Thread Travis Vitek
 

>Eric Lemings wrote:
>
>Travis,
>
>According to our plans for type traits, is this how you would define an
>internal class template that combines the add_const and
>add_reference type modifiers?
>
>   #include 
>
>   _RWSTD_NAMESPACE (__rw) {
>
>   template 
>   class __rw_add_const_ref
>   {
>   typedef _TYPENAME __rw_add_const<_TypeT>::type  _ConstT;
>
>   public:
>
>   typedef _TYPENAME __rw_add_reference<_ConstT>::type type;
>   };
>
>   }   // namespace __rw
>

It is really close. I'd probably make it a struct and if there was any
complicated logic it would move into an impl struct to reduce clutter in
the outer class.

If you need the above trait, I should let you know that TR1 had
add_reference, but C++0x replaces that with add_lvalue_reference and
add_rvalue_reference. So it you should probably use the new names as we
probably won't have an __rw_add_reference trait.

#include 

_RWSTD_NAMESPACE (__rw) {

template 
struct __rw_add_const_ref
{
typedef _TYPENAME __rw_add_lval_ref<
  _TYPENAME __rw_add_const<_TypeT>::type
  >::type type;
};

}   // namespace __rw

>Also, it'd be nice if you jot down some of these plans for type traits
>on the C++0x Wiki ; e.g., header
>names, internal utilities, TODO work, etc.  ;)

Yes, I know. Given that discussion on the topic has died down I could
actually document what we've arrived at.

>
>Thanks,
>Brad.
>