Return-Path: Delivered-To: apmail-stdcxx-dev-archive@www.apache.org Received: (qmail 63275 invoked from network); 2 Jul 2008 01:56:02 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 2 Jul 2008 01:56:02 -0000 Received: (qmail 60189 invoked by uid 500); 2 Jul 2008 01:56:04 -0000 Delivered-To: apmail-stdcxx-dev-archive@stdcxx.apache.org Received: (qmail 60177 invoked by uid 500); 2 Jul 2008 01:56:04 -0000 Mailing-List: contact dev-help@stdcxx.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@stdcxx.apache.org Delivered-To: mailing list dev@stdcxx.apache.org Received: (qmail 60166 invoked by uid 99); 2 Jul 2008 01:56:04 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 01 Jul 2008 18:56:04 -0700 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: local policy) Received: from [208.30.140.160] (HELO moroha.roguewave.com) (208.30.140.160) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 02 Jul 2008 01:55:13 +0000 Received: from exchmail01.Blue.Roguewave.Com (exchmail01.blue.roguewave.com [10.22.129.22]) by moroha.roguewave.com (8.13.6/8.13.6) with ESMTP id m621rW0J024487 for ; Wed, 2 Jul 2008 01:53:32 GMT X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Subject: Traits used by the implementation Date: Tue, 1 Jul 2008 19:52:46 -0600 Message-ID: X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: Traits used by the implementation Thread-Index: Acjb5lMhyql3NqEHTGiTHF2s0JlJDQ== From: "Travis Vitek" To: X-Virus-Checked: Checked by ClamAV on apache.org In an effort to better organize the type traits, I'm attempting to figure out what traits we expect to be using in the implementation. I see that the tuple implementation is using __rw_remove_reference and that there are already some parts of the library that use __rw_is_same (from rw/_select.h) and __rw_select (which is similar to __rw_conditional<__rw_is_integral::value>, void*, int). It is my thinking that the above listed traits, the __rw_has_trivial_*, __rw_has_nothrow_*, __rw_is_pod, __rw_is_void, __rw_is_array, __rw_conditional, __rw_enable_if and __rw_disable_if traits would all be useful in the library implementation. So these traits, and their dependencies should probably be made available internally.=20 That would mean that the following traits would be kept in namespace __rw (I've provided a list of traits and their dependencies near the end of this message). __rw_is_void __rw_is_array __rw_is_scalar __rw_is_arithmetic __rw_is_enum __rw_is_pointer __rw_is_member_pointer __rw_is_reference __rw_is_lvalue_reference __rw_is_rvalue_reference __rw_is_same __rw_is_const __rw_remove_cv __rw_is_trivial __rw_is_standard_layout __rw_is_pod __rw_remove_all_extents __rw_has_trivial_ctor __rw_has_trivial_copy __rw_has_trivial_dtor __rw_has_trivial_assign __rw_has_nothrow_ctor __rw_has_nothrow_copy __rw_has_nothrow_assign Other traits would be removed from namespace __rw and their implementation moved to . Are there any other traits that might be useful inside the library implementation? Travis Traits with no dependencies __rw_is_void __rw_is_integral __rw_is_floating_point __rw_is_array __rw_is_pointer __rw_is_lvalue_reference __rw_is_rvalue_reference __rw_is_union (**) __rw_is_class (**) __rw_is_member_pointer __rw_remove_pointer __rw_remove_reference __rw_remove_extent __rw_remove_all_extents __rw_remove_const __rw_remove_volatile __rw_is_same __rw_is_base_of (*) __rw_conditional __rw_enable_if __rw_disable_if __rw_aligned_storage __rw_is_signed __rw_is_unsigned __rw_rank __rw_extent __rw_alignment_of (*) * requires compiler support ** could be implemented without compiler support it if the other had it. Traits and their dependencies __rw_is_standard_layout (*) __rw_is_scalar __rw_remove_cv __rw_remove_all_extents __rw_is_trivial (*) __rw_is_scalar __rw_remove_cv __rw_remove_all_extents __rw_has_trivial_ctor (*) __rw_is_pod __rw_remove_all_extents __rw_has_trivial_copy (*) __rw_is_pod __rw_is_reference __rw_has_trivial_dtor (*) __rw_is_pod __rw_is_reference __rw_remove_all_extents __rw_has_trivial_assign (*) __rw_is_pod __rw_is_const __rw_is_reference __rw_has_nothrow_ctor (*) __rw_has_trivial_ctor __rw_has_nothrow_copy (*) __rw_has_trivial_copy __rw_has_nothrow_assign (*) __rw_has_trivial_assign __rw_is_pod (*) __rw_remove_all_extents __rw_is_standard_layout __rw_is_trivial =09 __rw_is_function (*) __rw_is_void __rw_is_array __rw_is_lvalue_reference __rw_is_rvalue_reference __rw_is_member_object_pointer __rw_is_function __rw_is_member_function_pointer __rw_is_function __rw_is_reference __rw_is_lvalue_reference __rw_is_rvalue_reference __rw_is_arithmetic __rw_is_integral __rw_is_floating_point __rw_is_fundamental __rw_is_arithmetic __rw_is_void __rw_is_object __rw_is_function __rw_is_reference __rw_is_void __rw_is_scalar __rw_is_arithmetic __rw_is_enum __rw_is_pointer __rw_is_member_pointer [__rw_is_same, __rw_remove_cv] std::nullptr_t __rw_is_compound __rw_is_array __rw_is_function __rw_is_pointer __rw_is_reference __rw_is_class __rw_is_union __rw_is_enum __rw_is_member_pointer __rw_add_lvalue_reference __rw_is_void __rw_is_reference __rw_is_rvalue_reference __rw_add_rvalue_reference __rw_is_object __rw_is_function __rw_remove_cv __rw_remove_const __rw_remove_volatile __rw_add_const: __rw_is_function __rw_is_reference __rw_add_volatile: __rw_is_function __rw_is_reference __rw_add_cv: __rw_add_const __rw_add_volatile __rw_add_pointer __rw_remove_reference __rw_is_convertible (*): __rw_is_array __rw_is_function __rw_remove_extent __rw_add_pointer __rw_add_lvalue_reference __rw_is_void __rw_aligned_union: __rw_conditional __rw_decay: __rw_remove_reference __rw_conditional __rw_is_function __rw_add_pointer __rw_remove_cv __rw_is_array __rw_remove_extent __rw_make_signed, __rw_make_unsigned __rw_remove_cv __rw_conditional __rw_is_integral __rw_is_const __rw_add_const __rw_is_volatile __rw_add_volatile * only if necessary compiler support does not exist. If compiler support is provided and correct, then the implementation is trivial.