>Martin Sebor wrote:
>
>Eric Lemings wrote:
>>  
>> 
>>> -----Original Message-----
>>> From: Travis Vitek 
>>> Sent: Thursday, June 12, 2008 4:18 PM
>>> To: Eric Lemings
>>> Subject: RE: remove_reference
>>>
>>>  
>>>
>>>> Eric Lemings 
>>>>
>> ...
>>>> I think you sorta missed my point.  My point is that if 
>the internal
>>>> type traits do not provide any real added value, why bother with
>>>> them?  Say you have an internal class __rw_foo and a public class
>>>> foo which derives from __rw_foo but is virtual identical, why have
>>>> __rw_foo at all?  Why not move everything in __rw_foo directly into
>>>> foo?
>>>>
>>> Sorry, I understood what you were getting at, I just didn't 
>>> come right out and provide the answer you were looking for. 
>>> Yes, we intend to use traits in the library implementation 
>>> where we can take advantage of them for performance 
>>> improvements. The example I provided above is just one of 
>>> many situations that we may do so.
>> 
>> Performance improvements...such as taking advantage of 
>built-in compiler
>> type traits?  If that were the case, I could see the 
>rationale for using
>> internal type traits as a proxy for such optimization.  So I 
>guess there
>> is SOME value after all.  :)
>
>The original idea, IIRC, was to expose the implementation
>of the traits in the form of _RWSTD_XXX() macros to be used
>by the rest of our code, including the standard type traits
>template. Each macro would expand into either the compiler
>built-in for compilers that supported them or to our own
>__rw_xxx trait otherwise. The reason for this was to avoid
>paying a penalty in terms of increased compile times and
>keep the <type_traits> header free of unnecessary clutter
>when using the compiler-provided traits, as well as to avoid
>namespace pollution when using the traits.
>

So I've managed to diverge from the original idea. This is almost funny
considering all of the discussion that we had about the need for
internal traits to inherit from __rw_integral_constant<>.

Well, now that I've finally got the traits in subversion, I could go
back and 'fix' this to compile out the implementation types when the
necessary compiler support is not available. Something more like my
original implementation.

#ifndef _RWSTD_IS_POD

template <class _TypeT>
struct __rw_is_pod
{
    enum { _C_value =    _RWSTD_IS_TRIVIAL(_Type)
                      && _RWSTD_IS_STANDARD_LAYOUT(_Type)
    };
};

#  define _RWSTD_IS_POD(T) _RW::__rw_is_pod<T>::type
#endif

>Martin
>

Reply via email to