>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
>