Boost logo

Boost :

From: Howard Hinnant (hinnant_at_[hidden])
Date: 2004-12-02 22:54:07


On Dec 2, 2004, at 9:46 PM, Matt Austern wrote:

> On Thu, 2 Dec 2004 21:02:10 -0500, Howard Hinnant
> <hinnant_at_[hidden]> wrote:
>
>> Metrowerks::has_trivial_copy_ctor<T>::value
>>
>> for a year or two now (depending on platform). Some of the STL
>> containers use this information for optimizations. The implementation
>> of this trait is tied to the Metrowerks compiler in a non-standard-C++
>> fashion (e.g. a compiler intrinsic).
>
> This is probably getting to be more standards-related than
> boost-related, but... Assuming it isn't proprietary information, it
> would be useful if you could say a little bit about what your
> intrinsic looks like. As you may know, the core people, especially
> EDG, would like to see those sorts of intrinsics standardized.
> Everyone is going to have to implement some kind of interface that
> makes type traits implementable, and the EDG people figure that
> everyone might as well all implement the same thing.

No problem. I have my doubts about needing to standardize at the
language level, that's what std::libs are for: We write non-portable
code so you don't have to. (that's my motto) :-) Although a
de-facto, unofficial standard would certainly be convenient for us
vendors.

But here is a copy/paste:

        template <class T>
        struct class_has_trivial_copy_ctor
        {
        #if __MWERKS__ >= 0x3100
                static const bool value = __builtin_trivial_members(T) & 0x4;
        #else
                static const bool value = false; // hook
        #endif
        };

Notes: class_has_trivial_copy_ctor is not a client level interface,
has_trivial_copy_ctor is. At the class_has_trivial_copy_ctor level, T
is guaranteed to be a struct or a class (not a union, scalar,
reference, array, void or function) (fwiw).

-Howard


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk