[prev in list] [next in list] [prev in thread] [next in thread]
List: apache-stdcxx-commits
Subject: svn commit: r671667 - in /stdcxx/trunk: doc/ etc/config/src/ include/
From: vitek () apache ! org
Date: 2008-06-25 21:33:40
Message-ID: 20080625213341.46D49238895D () eris ! apache ! org
[Download RAW message or body]
Author: vitek
Date: Wed Jun 25 14:33:39 2008
New Revision: 671667
URL: http://svn.apache.org/viewvc?rev=671667&view=rev
Log:
2008-06-25 Travis Vitek <vitek@roguewave.com>
Merge r664274, r664277, r667365, r667396, r667636, r667638, r668208,
r668215, r668223, r668225, r668274, r668279, r668318, r668340,
r668350, r668727, r668829, r668865, r668873, r669070, r669071,
r669092, r669093, r669241, r669248 from branches/4.3.x
2008-06-06 Travis Vitek <vitek@roguewave.com>
* tests/localization/22.locale.synopsis.cpp: Update include
directive for renamed test driver header.
2008-06-08 Travis Vitek <vitek@roguewave.com>
* etc/config/src/headers.inc: Revert unintentional
change from r664271.
2008-06-12 Travis Vitek <vitek@roguewave.com>
STDCXX-916
* include/type_traits: New file defines C++0x type traits.
* include/rw/_config-gcc.h (_RWSTD_TT_IS_ENUM, _RWSTD_TT_IS_UNION)
(_RWSTD_TT_IS_CLASS, _RWSTD_TT_IS_POD, _RWSTD_TT_IS_EMPTY)
(_RWSTD_TT_IS_POLYMORPHIC, _RWSTD_TT_IS_ABSTRACT, _RWSTD_TT_IS_BASE_OF)
(_RWSTD_TT_HAS_TRIVIAL_CTOR, _RWSTD_TT_HAS_TRIVIAL_COPY)
(_RWSTD_TT_HAS_TRIVIAL_ASSIGN, _RWSTD_TT_HAS_TRIVIAL_DTOR)
(_RWSTD_TT_HAS_NOTHROW_CTOR, _RWSTD_TT_HAS_NOTHROW_COPY)
(_RWSTD_TT_HAS_TRIVIAL_ASSIGN, _RWSTD_TT_HAS_VIRTUAL_DTOR)
(_RWSTD_TT_ALIGN_OF, _RWSTD_ALIGNED_POD, _RWSTD_MAX_ALIGNMENT): Add
macros for compiler support.
* include/rw/_config-msvc.h [_RWSTD_TT_IS_ENUM, _RWSTD_TT_IS_UNION)
(_RWSTD_TT_IS_CLASS, _RWSTD_TT_IS_POD, _RWSTD_TT_IS_EMPTY)
(_RWSTD_TT_IS_POLYMORPHIC, _RWSTD_TT_IS_ABSTRACT, _RWSTD_TT_IS_BASE_OF)
(_RWSTD_TT_IS_CONVERTIBLE, _RWSTD_TT_HAS_VIRTUAL_DTOR)
(_RWSTD_TT_HAS_TRIVIAL_CTOR, _RWSTD_TT_HAS_TRIVIAL_ASSIGN)
(_RWSTD_TT_HAS_TRIVIAL_COPY, _RWSTD_TT_HAS_TRIVIAL_DTOR)
(_RWSTD_TT_HAS_NOTHROW_CTOR, _RWSTD_TT_HAS_NOTHROW_ASSIGN)
(_RWSTD_TT_HAS_NOTHROW_COPY, _RWSTD_TT_ALIGN_OF, _RWSTD_TT_ALIGNED_POD)
(_RWSTD_TT_MAX_ALIGNMENT): Ditto.
* include/rw/_config.h [_RWSTD_EXT_CXX_OX]: Disable C++0x
extensions unless defined.
* include/rw/_defs.h (_RWSTD_SWCHAR_INT_T): Add new macro that
defines a type that has same size and layout a the fictional
signed wchar_t.
(_RWSTD_UWCHAR_INT_T): Modify definition to handle case where
unsigned long is not the same size as unsigned int. Add case for
unsigned long long.
* etc/config/src/STATIC_ASSERT.cpp: Add configuration test to
check for C++0x static_assert.
* include/rw/_static_assert.h (_RWSTD_STATIC_ASSERT): Add a
helper macro and fallback implementation for static_assert.
STDCXX-917
* include/rw/_meta_help.h: New file includes definitions for
traits classes.
* tests/utilities/20.meta.help.cpp: Disable all C++0x code unless
explicitly enabled. Update copyright and comment.
STDCXX-918
* include/rw/_meta_cat.h: New file includes definitions for
trait classes.
* tests/utilities/20.meta.unary.cat.cpp: Add test.
STDCXX-919
* include/rw/_meta_comp.h: New file includes definitions for
trait classes.
* tests/utilities/20.meta.unary.comp.cpp: Add test.
STDCXX-920
* include/rw/_meta_prop.h: New file includes definitions for
trait classes.
* tests/utilities/20.meta.unary.prop.cpp: Add test.
STDCXX-921
* include/rw/_meta_rel.h: New file includes definitions for
trait classes.
* tests/utilities/20.meta.rel.cpp: Add test.
STDCXX-922
* include/rw/_meta_cv.h: New file includes definitions for
trait classes.
* tests/utilities/20.meta.trans.cv.cpp: Add test.
STDCXX-922
* include/rw/_meta_cv.h: New file includes definitions for
trait classes.
* tests/utilities/20.meta.trans.cv.cpp: Add test.
STDCXX-923
* include/rw/_meta_ref.h: New file includes definitions for
trait types.
* tests/utilities/20.meta.trans.ref.cpp: Add test.
STDCXX-924
* include/rw/_meta_arr.h: New file includes definitions for
traits classes.
* tests/utilities/20.meta.trans.arr.cpp: Add test.
STDCXX-925
* include/rw/_meta_ptr.h: New file includes definitions for
traits classes.
* tests/utilities/20.meta.trans.ptr.cpp: Add test.
STDCXX-926
* include/rw/_meta_other.h: New file includes definitions for
traits classes.
* tests/utilities/20.meta.trans.other.cpp: Add test.
STDCXX-947
* include/rw/_meta_sign.h: New file includes definitions for
traits classes.
* tests/utilities/20.meta.trans.sign.cpp: Add test.
2008-06-13 Travis Vitek <vitek@roguewave.com>
* include/type_traits: integral_constant no longer inherits from
__rw_integral_constant.
* include/rw/_config-gcc.h: Disable __is_convertible on gcc as it
doesn't seem to exist.
* include/rw/_meta_cat.h: Expose helper macros.
* include/rw/_meta_rel.h: Ditto. Enable is_convertible fallback.
* include/_rw/_meta_prop.h: Use explicit specialization to identify
signed and unsigned types to avoid warnings on gnu. Use fallback
for __rw_is_standard_layout. Use _RWSTD_SIZE_T instead of size_t.
* tests/utilities/20.meta.unary.prop.cpp: Use _RWSTD_SIZE_T instead
of size_t. Add a few tests, fix several others.
(test_make_unsigned): Fix search-n-replace error.
2008-06-13 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-958
* include/rw/_forward.h: New header file containing initial
implementation of std::identity class template; std::forward()
and std::move() functions; and internal _RWSTD_MOVE() macro.
2008-06-13 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-916
* include/rw/_meta_cat.h, include/rw/_meta_ref.h,
include/rw/_meta_rel.h: Include missing headers.
* include/rw/_static_assert.h [_RWSTD_STATIC_ASSERT]: Reverse
definitions. Add Mesg parameter to internal definition so both
definitions have same number of parameters.
* etc/config/src/STATIC_ASSERT.cpp (main): Change main() to a
regular function so config scripts don't find main() and
(unnecessarily) link (and run?) program.
2008-06-13 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-958
* tests/utilities/20.forward.cpp: Rough outline of new test for
exercising move/forward helpers in <utility> header.
2008-06-16 Travis Vitek <vitek@roguewave.com>
* include/rw/_defs.h: Remove block defining macros for
trait compiler support.
* include/rw/_config-gcc.h: Add newline to end of file.
* include/rw/_config.msvc.h: Ditto.
2008-06-16 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-916
* include/rw/_meta_help.h: Added some missing documentation.
2008-06-16 Travis Vitek <vitek@roguewave.com>
STDCXX-916
* rw/_meta_help.h: Update header guard to reflect
the name of the header it is used in.
* rw/_meta_sign.h: Ditto.
* rw/_meta_ptr.h: Ditto.
* rw/_meta_cv.h: Ditto.
* rw/_meta_prop.h: Ditto.
* rw/_meta_other.h: Ditto.
* rw/_meta_arr.h: Ditto.
* rw/_meta_comp.h: Ditto.
* rw/_meta_cat.h: Ditto.
* rw/_meta_ref.h: Ditto.
* rw/_meta_rel.h: Ditto.
2008-06-16 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-958
* etc/config/src/VA_LIST_FUNC_MACRO.cpp: Initial version of
configuration check for va-list function macros.
2008-06-16 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-916
* tests/utilities/20.meta.unary.cat.cpp: Include <stddef.h> to
define `size_t' type.
2008-06-16 Travis Vitek <vitek@roguewave.com>
STDCXX-926
* include/rw/_meta_other.h [!_RWSTD_NO_VARIADIC_TEMPLATES]: Fix
__rw_aligned_union implementation.
2006-06-16 Travis Vitek <vitek@roguewave.com>
STDCXX-926
* tests/utilities/20.meta.trans.other.cpp (cond_if_char): Add
typename to avoid compile error on gcc.
2008-06-16 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-958
* include/rw/_forward.h (std::identity<T>::operator()): Add
missing `const' to function signature.
2008-06-16 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-958
* include/tuple, include/rw/_tuple.h, include/rw/_tuple_traits.h:
Add initial version of headers defining tuple interface and
implementation. (Only tested on Linux/gcc-4.3 platforms so far.)
* tests/utilities/20.tuple.cnstr.cpp: Rough outline of first
tuple test program.
2008-06-16 Travis Vitek <vitek@roguewave.com>
STDCXX-920
* tests/utilities/20.meta.unary.prop.cpp: Use size_t instead
of _RWSTD_SIZE_T. Update test to correctly reflect behaviors
required by standard.
2008-06-16 Travis Vitek <vitek@roguewave.com>
STDCXX-921
* tests/utilities/20.meta.rel.cpp: Update test to correctly
reflect behaviors required by the standard.
2008-06-16 Travis Vitek <vitek@roguewave.com>
STDCXX-947
* include/rw/_defs.h [_RWSTD_UWCHAR_INT_T,_RWSTD_SWCHAR_INT_T]: Revert
changes from r667365.
* include/rw/_meta_sign.h: Define make_signed and make_unsigned to
properly handle char and wchar_t according to current standard.
* tests/utilities/20.meta.trans.sign.cpp: Use size_t as appropriate.
Update test to correctly reflect behaviors required by the standard.
2008-06-16 Travis Vitek <vitek@roguewave.com>
STDCXX-920
* include/rw/_meta_prop.h: Add is_signed support for floating point
types accidentally removed in r667396. Fix is_trivial to behave
correctly for cv-qualified types.
2008-06-17 Travis Vitek <vitek@roguewave.com>
STDCXX-916
* include/rw/_static_assert.h: Qualify __rw_assert_failed with
_RW to avoid compile errors when using _RWSTD_STATIC_ASSERT().
2008-06-17 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-958
* include/tuple (tuple_size): Implemented and documented.
* include/rw/_tuple_traits.h: Corrected documentation for
grouping and template parameters.
* include/rw/_forward.h: Likewise.
* include/rw/_tuple.h: Likewise. Also, corrected/implemented,
documented more constructors and operators.
* tests/utilities/20.tuple.h: Added missing header.
* tests/utilities/20.tuple.cnstr.cpp: Added more constructor,
operator tests.
2008-06-17 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-958
* include/rw/_tuple.h: Added tail accessors. Use tail accessors
in constructors and operators to properly construct base class
object.
* tests/utilities/20.tuple.cnstr.cpp: Uncomment BigTuple test
case that was failing to build because of this problem.
2008-06-17 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-958
* include/rw/_tuple.h: Implemented value move ctor.
* tests/utilities/20.tuple.cnstr.cpp: Added value move ctor test
cases. (No copy ctors called in UserClass!) Unknown problem
with NestedTuple ctor. Temporarily commented out.
2008-06-17 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-958
* include/rw/_forward.h: Fixed tags in return value docs.
* include/rw/_tuple.h: Implemented and documented remaining
constructors and operators (except alloc ctors). Fixed some
forward/move semantics. Fixed tags in return value docs.
2008-06-17 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-958
* include/tuple: Check _RWSTD_EXT_CXX_0X macro _after_ including
<rw/_defs.h> header.
2008-06-18 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-958
* include/tuple: Fix spelling of `_RWSTD_NO_RVALUE_REFERENCES'.
2008-06-18 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-958
* include/rw/_tuple.h: Include <rw/_defs.h> header before
checking _RWSTD_NO_EXT_CXX_0X macro.
2008-06-18 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-958
* include/rw/_tuple_traits.h: Include <rw/_defs.h> header before
checking configuration macros.
2008-06-18 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-958
* include/rw/_forward.h: Include <rw/_defs.h> before checking
configuration macro(s).
* include/rw/_allocator.h (std::allocator_arg_t)
(std::allocator_arg): Define empty C++0x class and global
constant if C++0x extension is enabled.
* include/rw/_tuple.h: Added declarations for user-defined
allocator constructors. Also, assume comiler features include
member templates.
2008-06-18 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-965
* doc/Doxyfile: Initial version of Doxygen configuration file.
(Currently assumes SRCDIR and BUILDDIR environment variables are
set appropriately.)
2008-06-19 Travis Vitek <vitek@roguewave.com>
STDCXX-926
* include/rw/_meta_other.h: Add typedef keyword to nested union
types used by aligned_storage and aligned_union types. Require
at least one type be provided to aligned_union. Allow length
passed to aligned_union to be 0.
2008-06-19 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-958
* include/tuple: Implement and document tuple_element. Minor
doc changes for tuple_size.
* tests/utilities/20.tuple.h: Fix copyright date. Remove
(currently) unnecessary includes. Add macro for size of BigList.
* tests/utilities/20.tuple.helpers.cpp: Added new (complete and
working!) test for tuple helpers.
2008-06-19 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-958
* tests/utilities/20.tuple.helpers.cpp (test_tuple_size): Add
TEST() macro and update existing tests to utilize macro.
(test_tuple_element): Remove using directives and explicitly
reference `std' namespace members.
2008-06-19 Travis Vitek <vitek@roguewave.com>
STDCXX-926
* include/rw/_meta_other.h: Make __rw_aligned_union compile
on gcc-4.3 again by forward declaring template and using
using correct template parameter name.
2008-06-19 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-958
* include/rw/_meta_cv.h: Include <rw/_meta_comp.h> to define
__rw_is_reference trait.
* include/rw/_tuple.h (__get): Add new accessors to allow access
to head element value. Accessors are public but intended (and
undocumented) for internal use only.
* include/tuple (tuple_element): Added internal get() helpers.
(get): Implemented and documented.
* tests/utilities/20.tuple.elem.cpp: Added framework for new
(and incomplete) test for tuple element accessors.
2008-06-19 Travis Vitek <vitek@roguewave.com>
STDCXX-926
* include/type_traits: Update comments describing each trait. Use
correct type for the underlying integral_constant used by traits
alignment_of, rank, extent, is_base_of and is_convertible. Enable
aligned_union. Add defaulted alignment for aligned_storage.
* include/rw/_meta_other.h: Implement __rw_aligned_storage. Add
support for defaulted alignment. Update __rw_aligned_union to
use __rw_aligned_storage to get an aligned block.
* tests/utilities/20.meta.trans.other.cpp (test_trait): Correct
assertion message to display correct string.
(test_aligned_storage): Add testing for aligned_storage.
(test_aligned_union): Add testing for aligned_union.
2008-06-19 Travis Vitek <vitek@roguewave.com>
STDCXX-926
* include/type_traits: Replace tabs with spaces. Remove bad
declaration of aligned_union.
* include/rw/_meta_other.h: Fix partial specialization of both
__rw_strictest and __rw_biggest. Use correct name for the
__rw_aligned_struct nested type in __rw_aligned_union. Compile
out definition of member constants as they cause errors on gcc.
* tests/utilities/20.meta.trans.other.cpp: Remove unnecessary
semicolon.
(test_aligned_union): Add a typedef for the aligned type inside
aligned_union.
2008-06-19 Travis Vitek <vitek@roguewave.com>
STDCXX-919
* tests/utilities/20.meta.unary.comp (test_is_scalar): Update
test expectations to match requirements.
(test_is_object): Ditto.
(test_is_compound): Ditto.
2008-06-20 Travis Vitek <vitek@roguewave.com>
STDCXX-926
* include/rw/_meta_other.h: Remove unnecessary whitespace,
simplify workaround for msvc.
2008-06-20 Travis Vitek <vitek@roguewave.com>
STDCXX-926
* include/rw/_meta_other.h: Replace size_t with macro
_RWSTD_SIZE_T.
2008-06-20 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-958
* tests/utilities/20.tuple.cnstr.cpp (test_default_ctor):
(test_value_copy_ctor, test_value_move_ctor, test_homo_copy_ctor):
Fix assertions for total # of UserClass copy ctors called.
(test_homo_move_ctor, test_homo_copy_assign):
(test_homo_move_assign, test_hetero_copy_ctor): Added new tests.
(test_hetero_move_ctor, test_hetero_copy_assign):
(test_hetero_move_assign, test_alloc_ctors): Added outline for
remaining tests.
2008-06-20 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-926
* include/rw/_meta_other.h: Add parentheses around template
parameters used as sizeof() arguments to make benefit for
glorious compiler of gcc 4.3.
2008-06-21 Eric Lemings <eric.lemings@roguewave.com>
STDCXX-958
* include/rw/_ref_wrap.h: Add internal header for reference
wrappers. (Currently just an empty class template.)
* include/tuple: Add helpers for deducing return type of
make_tuple() function.
(make_tuple): Implemented and documented.
Added:
stdcxx/trunk/doc/Doxyfile
- copied unchanged from r670100, stdcxx/branches/4.3.x/doc/Doxyfile
stdcxx/trunk/etc/config/src/STATIC_ASSERT.cpp
- copied unchanged from r670100, \
stdcxx/branches/4.3.x/etc/config/src/STATIC_ASSERT.cpp \
stdcxx/trunk/etc/config/src/VA_LIST_FUNC_MACRO.cpp
- copied unchanged from r670100, \
stdcxx/branches/4.3.x/etc/config/src/VA_LIST_FUNC_MACRO.cpp \
stdcxx/trunk/include/rw/_forward.h
- copied unchanged from r670100, stdcxx/branches/4.3.x/include/rw/_forward.h
stdcxx/trunk/include/rw/_meta_arr.h
- copied unchanged from r670100, stdcxx/branches/4.3.x/include/rw/_meta_arr.h
stdcxx/trunk/include/rw/_meta_cat.h
- copied unchanged from r670100, stdcxx/branches/4.3.x/include/rw/_meta_cat.h
stdcxx/trunk/include/rw/_meta_comp.h
- copied unchanged from r670100, stdcxx/branches/4.3.x/include/rw/_meta_comp.h
stdcxx/trunk/include/rw/_meta_cv.h
- copied unchanged from r670100, stdcxx/branches/4.3.x/include/rw/_meta_cv.h
stdcxx/trunk/include/rw/_meta_help.h
- copied unchanged from r670100, stdcxx/branches/4.3.x/include/rw/_meta_help.h
stdcxx/trunk/include/rw/_meta_other.h
- copied unchanged from r670100, stdcxx/branches/4.3.x/include/rw/_meta_other.h
stdcxx/trunk/include/rw/_meta_prop.h
- copied unchanged from r670100, stdcxx/branches/4.3.x/include/rw/_meta_prop.h
stdcxx/trunk/include/rw/_meta_ptr.h
- copied unchanged from r670100, stdcxx/branches/4.3.x/include/rw/_meta_ptr.h
stdcxx/trunk/include/rw/_meta_ref.h
- copied unchanged from r670100, stdcxx/branches/4.3.x/include/rw/_meta_ref.h
stdcxx/trunk/include/rw/_meta_rel.h
- copied unchanged from r670100, stdcxx/branches/4.3.x/include/rw/_meta_rel.h
stdcxx/trunk/include/rw/_meta_sign.h
- copied unchanged from r670100, stdcxx/branches/4.3.x/include/rw/_meta_sign.h
stdcxx/trunk/include/rw/_ref_wrap.h
- copied unchanged from r670100, stdcxx/branches/4.3.x/include/rw/_ref_wrap.h
stdcxx/trunk/include/rw/_static_assert.h
- copied unchanged from r670100, \
stdcxx/branches/4.3.x/include/rw/_static_assert.h stdcxx/trunk/include/rw/_tuple.h
- copied unchanged from r670100, stdcxx/branches/4.3.x/include/rw/_tuple.h
stdcxx/trunk/include/rw/_tuple_traits.h
- copied unchanged from r670100, \
stdcxx/branches/4.3.x/include/rw/_tuple_traits.h stdcxx/trunk/include/tuple
- copied unchanged from r670100, stdcxx/branches/4.3.x/include/tuple
stdcxx/trunk/tests/utilities/20.forward.cpp
- copied unchanged from r670100, \
stdcxx/branches/4.3.x/tests/utilities/20.forward.cpp \
stdcxx/trunk/tests/utilities/20.meta.rel.cpp
- copied unchanged from r670100, \
stdcxx/branches/4.3.x/tests/utilities/20.meta.rel.cpp \
stdcxx/trunk/tests/utilities/20.meta.trans.arr.cpp
- copied unchanged from r670100, \
stdcxx/branches/4.3.x/tests/utilities/20.meta.trans.arr.cpp \
stdcxx/trunk/tests/utilities/20.meta.trans.cv.cpp
- copied unchanged from r670100, \
stdcxx/branches/4.3.x/tests/utilities/20.meta.trans.cv.cpp \
stdcxx/trunk/tests/utilities/20.meta.trans.other.cpp
- copied unchanged from r670100, \
stdcxx/branches/4.3.x/tests/utilities/20.meta.trans.other.cpp \
stdcxx/trunk/tests/utilities/20.meta.trans.ptr.cpp
- copied unchanged from r670100, \
stdcxx/branches/4.3.x/tests/utilities/20.meta.trans.ptr.cpp \
stdcxx/trunk/tests/utilities/20.meta.trans.ref.cpp
- copied unchanged from r670100, \
stdcxx/branches/4.3.x/tests/utilities/20.meta.trans.ref.cpp \
stdcxx/trunk/tests/utilities/20.meta.trans.sign.cpp
- copied unchanged from r670100, \
stdcxx/branches/4.3.x/tests/utilities/20.meta.trans.sign.cpp \
stdcxx/trunk/tests/utilities/20.meta.unary.cat.cpp
- copied unchanged from r670100, \
stdcxx/branches/4.3.x/tests/utilities/20.meta.unary.cat.cpp \
stdcxx/trunk/tests/utilities/20.meta.unary.comp.cpp
- copied unchanged from r670100, \
stdcxx/branches/4.3.x/tests/utilities/20.meta.unary.comp.cpp \
stdcxx/trunk/tests/utilities/20.meta.unary.prop.cpp
- copied unchanged from r670100, \
stdcxx/branches/4.3.x/tests/utilities/20.meta.unary.prop.cpp \
stdcxx/trunk/tests/utilities/20.tuple.cnstr.cpp
- copied unchanged from r670100, \
stdcxx/branches/4.3.x/tests/utilities/20.tuple.cnstr.cpp \
stdcxx/trunk/tests/utilities/20.tuple.elem.cpp
- copied unchanged from r670100, \
stdcxx/branches/4.3.x/tests/utilities/20.tuple.elem.cpp \
stdcxx/trunk/tests/utilities/20.tuple.h
- copied unchanged from r670100, \
stdcxx/branches/4.3.x/tests/utilities/20.tuple.h \
stdcxx/trunk/tests/utilities/20.tuple.helpers.cpp
- copied unchanged from r670100, \
stdcxx/branches/4.3.x/tests/utilities/20.tuple.helpers.cpp Modified:
stdcxx/trunk/etc/config/src/headers.inc
stdcxx/trunk/include/rw/_allocator.h
stdcxx/trunk/include/rw/_config-gcc.h
stdcxx/trunk/include/rw/_config-msvc.h
stdcxx/trunk/include/rw/_config.h
stdcxx/trunk/include/rw/_defs.h
stdcxx/trunk/include/type_traits
stdcxx/trunk/tests/utilities/20.meta.help.cpp
Modified: stdcxx/trunk/etc/config/src/headers.inc
URL: http://svn.apache.org/viewvc/stdcxx/trunk/etc/config/src/headers.inc?rev=671667&r1=671666&r2=671667&view=diff
==============================================================================
--- stdcxx/trunk/etc/config/src/headers.inc (original)
+++ stdcxx/trunk/etc/config/src/headers.inc Wed Jun 25 14:33:39 2008
@@ -21,8 +21,10 @@
##############################################################################
# list of headers
-hdrs="assert ctype errno float iso646 limits locale math setjmp signal \
- stdarg stddef stdio stdlib string time wchar wctype new typeinfo"
+hdrs="assert complex ctype errno fenv float inttypes iso646 limits locale \
+ math setjmp signal stdarg stdbool stddef stdio stdint stdlib string \
+ tgmath time uchar wchar wctype new typeinfo"
+
hdrs="$hdrs ieeefp.h pthread.h"
Modified: stdcxx/trunk/include/rw/_allocator.h
URL: http://svn.apache.org/viewvc/stdcxx/trunk/include/rw/_allocator.h?rev=671667&r1=671666&r2=671667&view=diff
==============================================================================
--- stdcxx/trunk/include/rw/_allocator.h (original)
+++ stdcxx/trunk/include/rw/_allocator.h Wed Jun 25 14:33:39 2008
@@ -63,6 +63,15 @@
_RWSTD_NAMESPACE (std) {
+#ifndef _RWSTD_NO_EXT_CXX_0X
+
+struct allocator_arg_t { };
+
+const allocator_arg_t allocator_arg = allocator_arg_t ();
+
+#endif
+
+
template <class _TypeT> class
allocator;
Modified: stdcxx/trunk/include/rw/_config-gcc.h
URL: http://svn.apache.org/viewvc/stdcxx/trunk/include/rw/_config-gcc.h?rev=671667&r1=671666&r2=671667&view=diff
==============================================================================
--- stdcxx/trunk/include/rw/_config-gcc.h (original)
+++ stdcxx/trunk/include/rw/_config-gcc.h Wed Jun 25 14:33:39 2008
@@ -174,3 +174,32 @@
# endif
# endif // __GNUG__ == 3 && __GNUC_MINOR__ < 1
#endif // _RWSTD_OS_SUNOS
+
+#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3))
+# define _RWSTD_TT_IS_ENUM(T) __is_enum(T)
+# define _RWSTD_TT_IS_UNION(T) __is_union(T)
+# define _RWSTD_TT_IS_CLASS(T) __is_class(T)
+//# define _RWSTD_TT_IS_FUNCTION(T) __is_function(T)
+# define _RWSTD_TT_IS_POD(T) __is_pod(T)
+# define _RWSTD_TT_IS_EMPTY(T) __is_empty(T)
+# define _RWSTD_TT_IS_POLYMORPHIC(T) __is_polymorphic(T)
+# define _RWSTD_TT_IS_ABSTRACT(T) __is_abstract(T)
+# define _RWSTD_TT_IS_BASE_OF(T,U) __is_base_of(T,U)
+//# define _RWSTD_TT_IS_CONVERTIBLE(T,U) __is_convertible(T,U)
+
+# define _RWSTD_TT_HAS_TRIVIAL_CTOR(T) __has_trivial_constructor(T)
+# define _RWSTD_TT_HAS_TRIVIAL_COPY(T) __has_trivial_copy(T)
+# define _RWSTD_TT_HAS_TRIVIAL_ASSIGN(T) __has_trivial_assign(T)
+# define _RWSTD_TT_HAS_TRIVIAL_DTOR(T) __has_trivial_destructor(T)
+
+# define _RWSTD_TT_HAS_NOTHROW_CTOR(T) __has_nothrow_constructor(T)
+# define _RWSTD_TT_HAS_NOTHROW_COPY(T) __has_nothrow_copy(T)
+# define _RWSTD_TT_HAS_NOTHROW_ASSIGN(T) __has_nothrow_assign(T)
+
+# define _RWSTD_TT_HAS_VIRTUAL_DTOR(T) __has_virtual_destructor(T)
+
+# define _RWSTD_TT_ALIGN_OF(T) __alignof__(T)
+# define _RWSTD_TT_ALIGNED_POD(N) struct { char __fill __attribute__ \
((aligned (N))); } +# define _RWSTD_TT_MAX_ALIGNMENT 16
+#endif // __GNUC__ >= 4.3
+
Modified: stdcxx/trunk/include/rw/_config-msvc.h
URL: http://svn.apache.org/viewvc/stdcxx/trunk/include/rw/_config-msvc.h?rev=671667&r1=671666&r2=671667&view=diff
==============================================================================
--- stdcxx/trunk/include/rw/_config-msvc.h (original)
+++ stdcxx/trunk/include/rw/_config-msvc.h Wed Jun 25 14:33:39 2008
@@ -86,3 +86,39 @@
// disable "'function': was declared deprecated"
#pragma warning (disable: 4996)
+
+// type trait helpers provided by msvc
+#if defined (_MSC_FULL_VER) && (_MSC_FULL_VER >= 140050215)
+# define _RWSTD_TT_HAS_NOTHROW_ASSIGN(T) __has_nothrow_assign(T)
+# define _RWSTD_TT_HAS_NOTHROW_CTOR(T) __has_nothrow_constructor(T)
+# define _RWSTD_TT_HAS_NOTHROW_COPY(T) __has_nothrow_copy(T)
+
+# define _RWSTD_TT_HAS_TRIVIAL_ASSIGN(T) __has_trivial_assign(T)
+# define _RWSTD_TT_HAS_TRIVIAL_CTOR(T) __has_trivial_constructor(T)
+# define _RWSTD_TT_HAS_TRIVIAL_COPY(T) __has_trivial_copy(T)
+# define _RWSTD_TT_HAS_TRIVIAL_DTOR(T) __has_trivial_destructor(T)
+
+# define _RWSTD_TT_HAS_VIRTUAL_DTOR(T) __has_virtual_destructor(T)
+
+# define _RWSTD_TT_IS_ABSTRACT(T) __is_abstract(T)
+# define _RWSTD_TT_IS_BASE_OF(T,U) __is_base_of(T,U)
+# define _RWSTD_TT_IS_CLASS(T) __is_class(T)
+# define _RWSTD_TT_IS_CONVERTIBLE(T,U) __is_convertible_to(T,U)
+# define _RWSTD_TT_IS_EMPTY(T) __is_empty(T)
+# define _RWSTD_TT_IS_ENUM(T) __is_enum(T)
+# define _RWSTD_TT_IS_POLYMORPHIC(T) __is_polymorphic(T)
+# define _RWSTD_TT_IS_UNION(T) __is_union(T)
+
+# define _RWSTD_TT_ALIGN_OF(T) __alignof(T)
+# define _RWSTD_TT_ALIGNED_POD(N) struct { __declspec(align(N)) char \
__fill; } +# define _RWSTD_TT_MAX_ALIGNMENT 16
+//# define _RWSTD_TT_MAX_ALIGNMENT 8192
+
+// __is_pod only seems to work for pod-class and pod-union types according
+// to the old definition of pod. it needs to exclude scalar types, as well
+// as types which are both trivial and standard layout. so, we work around
+// that by using our fallback.
+# define _RWSTD_TT_IS_POD(T) __is_pod(T)
+
+#endif // _MSC_FULL_VER >= 140050215
+
Modified: stdcxx/trunk/include/rw/_config.h
URL: http://svn.apache.org/viewvc/stdcxx/trunk/include/rw/_config.h?rev=671667&r1=671666&r2=671667&view=diff
==============================================================================
--- stdcxx/trunk/include/rw/_config.h (original)
+++ stdcxx/trunk/include/rw/_config.h Wed Jun 25 14:33:39 2008
@@ -495,5 +495,9 @@
# undef _RWSTD_NO_TEMPLATE_DEFINITIONS
#endif
+#ifndef _RWSTD_EXT_CXX_0X
+ // disable C++0x extensions unless asked to enable them
+# define _RWSTD_NO_EXT_CXX_0X
+#endif
#endif // _RWSTD_RW_CONFIG_H_INCLUDED
Modified: stdcxx/trunk/include/rw/_defs.h
URL: http://svn.apache.org/viewvc/stdcxx/trunk/include/rw/_defs.h?rev=671667&r1=671666&r2=671667&view=diff
==============================================================================
--- stdcxx/trunk/include/rw/_defs.h (original)
+++ stdcxx/trunk/include/rw/_defs.h Wed Jun 25 14:33:39 2008
@@ -1273,7 +1273,6 @@
# endif
#endif // _RWSTD_SSIZE_T
-
// _RWSTD_UWCHAR_INT_T is "unsigned wchar_t"
#ifndef _RWSTD_UWCHAR_INT_T
# if _RWSTD_CHAR_SIZE == _RWSTD_WCHAR_SIZE
Modified: stdcxx/trunk/include/type_traits
URL: http://svn.apache.org/viewvc/stdcxx/trunk/include/type_traits?rev=671667&r1=671666&r2=671667&view=diff
==============================================================================
--- stdcxx/trunk/include/type_traits (original)
+++ stdcxx/trunk/include/type_traits Wed Jun 25 14:33:39 2008
@@ -1,4 +1,4 @@
- // -*- C++ -*-
+// -*- C++ -*-
/***************************************************************************
*
* type_traits - definition of type_traits types
@@ -32,14 +32,172 @@
#include <rw/_defs.h>
-#ifndef _RWSTD_NO_EXT_CXX_0X
+#ifdef _RWSTD_NO_EXT_CXX_0X
+# error _RWSTD_NO_EXT_CXX_0X defined and C++0x header included
+#endif
+
+#include <rw/_meta_help.h>
+#include <rw/_meta_cat.h>
+#include <rw/_meta_comp.h>
+#include <rw/_meta_prop.h>
+#include <rw/_meta_rel.h>
+#include <rw/_meta_cv.h>
+#include <rw/_meta_ref.h>
+#include <rw/_meta_sign.h>
+#include <rw/_meta_arr.h>
+#include <rw/_meta_ptr.h>
+#include <rw/_meta_other.h>
_RWSTD_NAMESPACE (std) {
/**
+ * @defgroup meta_help Helper classes [meta.help]
+ */
+
+/**
+ * @defgroup meta_unary Unary Type Traits [meta.unary]
+ *
+ * A UnaryTypeTrait describes a property of a type. It shall be a
+ * class template that takes one template type argument and, optionally,
+ * additional arguments that help define the property being described.
+ * It shall be DefaultConstructible, CopyConstructible, and publicly
+ * derived, directly or indirectly, from a specialization of the template
+ * integral_constant, with the arguments to the template integral_constant
+ * determined by the requirements for the particular property being
+ * described.
+ *
+ * This sub-clause contains templates that may be used to query the
+ * properties of a type at compile time.
+ *
+ * Each of these templates shall be a UnaryTypeTrait, publicly derived
+ * directly or indirectly from true_type if the corresponding condition
+ * is true, otherwise from false_type.
+ */
+
+/**
+ * @defgroup meta_unary_cat Primary Type Categories [meta.unary.cat]
+ * @ingroup meta_unary
+ *
+ * These type categories correspond to the descriptions given in section
+ * [basic.types] of the C++ standard.
+ *
+ * For any given type T, the result of applying one of these templates
+ * to T and to cv-qualified T shall yield the same result.
+ *
+ * @note For any given type T, exactly one of the primary type
+ * categories has a \c value member that evaluates to true.
+ */
+
+/**
+ * @defgroup meta_unary_comp Composite Type Categories [meta.unary.comp]
+ * @ingroup meta_unary
+ *
+ * These templates provide convenient compositions of the primary type
+ * categories.
+ *
+ * For any given type T, the result of applying one of these templates
+ * to T, and to cv-qualified T shall yield the same result.
+ */
+
+/**
+ * @defgroup meta_unary_prop Type Properties [meta.unary.prop]
+ * @ingroup meta_unary
+ *
+ * These templates provide access to some of the more important properties
+ * of types.
+ *
+ * It is unspecified whether the library defines any full or partial
+ * specialisations of any of these templates. A program may specialise
+ * any of these templates on a user-defined type, provided the semantics
+ * of the specialisation match those given for the template in its
+ * description.
+ *
+ * For all of the class templates X declared in this clause, instantiating
+ * that template with a template-argument that is a class template
+ * specialization may result in the implicit instantiation of the template
+ * argument if and only if the semantics of X require that the argument
+ * must be a complete type.
+ */
+
+/**
+ * @defgroup meta_rel Relationships between types [meta.rel]
+ *
+ * This sub-clause contains templates that may be used to query
+ * relationships between types at compile time.
+ *
+ * Each of these templates shall be a BinaryTypeTrait, publicly
+ * derived directly or indirectly from true_type if the
+ * corresponding condition is true, otherwise from false_type.
+ */
+
+/**
+ * @defgroup meta_trans Transformations between types [meta.trans]
+ *
+ * A TransformationTrait modifies a property of a type. It shall
+ * be a class template that takes one template type argument and,
+ * optionally, additional arguments that help define the modification.
+ * It shall define a nested type named type, which shall be a synonym
+ * for the modified type.
+ *
+ * This sub-clause contains templates that may be used to transform
+ * one type to another following some predefined rule.
+ *
+ * Each of the templates in this subclause shall be a
+ * TransformationTrait.
+ */
+
+/**
+ * @defgroup meta_trans_cv Const-volatile modifications [meta.trans.cv]
+ * @ingroup meta_trans
+ *
+ * This sub-clause contains templates used to add and remove const
+ * and volatile qualifiers from types.
+ */
+
+/**
+ * @defgroup meta_trans_ref Reference modification [meta.trans.ref]
+ * @ingroup meta_trans
+ *
+ * This sub-clause contains templates used to add and remove reference
+ * semantics from types.
+ */
+
+/**
+ * @defgroup meta_trans_sign Sign modifications [meta.trans.sign]
+ * @ingroup meta_trans
+ *
+ * This sub-clause contains templates used to transform from signed
+ * to unsigned representation or vice-versa.
+ */
+
+/**
+ * @defgroup meta_trans_arr Array modifications [meta.trans.arr]
+ * @ingroup meta_trans
+ *
+ * This sub-clause contains templates used to manage array types.
+ */
+
+/**
+ * @defgroup meta_trans_pointer Pointer modifications [meta.trans.ptr]
+ * @ingroup meta_trans
+ *
+ * This sub-clause contains templates used to manage pointer types.
+ */
+
+/**
+ * @defgroup meta_trans_other Other transformations [meta.trans.other]
+ * @ingroup meta_trans
+ */
+
+/**
+ * @ingroup meta_help
+ *
* The class template integral_constant and its associated typedefs
* true_type and false_type are used as base classes to define the
* interface for various type traits.
+ *
+ * @tparam _TypeT The type of the integral constant value.
+ * @tparam _Value The value of the integral constant.
*/
template <class _TypeT, _TypeT _Value>
struct integral_constant
@@ -68,19 +226,1098 @@
#endif // _RWSTD_NO_STATIC_CONST_MEMBER_DEFINITION
/**
- * Convenience typedef that is intended to be used as a base class
+ * @ingroup meta_help
+ *
+ * Convenience typedef that are intended to be used as a base class
* for boolean type traits that are true.
*/
typedef integral_constant<bool, true> true_type;
/**
- * Convenience typedef that is intended to be used as a base class
+ * @ingroup meta_help
+ *
+ * Convenience typedef that are intended to be used as a base class
* for boolean type traits that are false.
*/
typedef integral_constant<bool, false> false_type;
-} // namespace std
+/**
+ * @ingroup meta_unary_cat
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is void or a cv-qualified
+ * void.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_void
+ : integral_constant<bool, _RW::__rw_is_void<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_cat
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is an integral type.
+ * Types \c bool, \c char, \c wchar_t, and the signed and unsigned
+ * integer types are collectively called integral types. The signed
+ * and unsigned integer types include signed and unsigned versions
+ * of \c char, \c short, \c int, \c long and \c long \c long.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_integral
+ : integral_constant<bool, _RW::__rw_is_integral<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_cat
+ *
+ * * \e UnaryTypeTrait to determine if _TypeT is a floating point type.
+ *
+ * Types \c float, \c double, \c long \c double, and cv-qualified versions
+ * of those types make up the set of floating point types.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_floating_point
+ : integral_constant<bool, _RW::__rw_is_floating_point<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_cat
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is an array type. Array types
+ * include both arrays of bounded and unbounded length.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_array
+ : integral_constant<bool, _RW::__rw_is_array<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_cat
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is a pointer type.
+ * Includes function pointers, but not pointers to non-static member
+ * functions.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_pointer
+ : integral_constant<bool, _RW::__rw_is_pointer<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_cat
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is an lvalue reference type.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_lvalue_reference
+ : integral_constant<bool, _RW::__rw_is_lvalue_reference<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_cat
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is an rvalue reference type.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_rvalue_reference
+ : integral_constant<bool, _RW::__rw_is_rvalue_reference<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_cat
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is a reference type.
+ *
+ * @note References to functions are still references, not functions.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_reference
+ : integral_constant<bool, _RW::__rw_is_reference<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_cat
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is a pointer to non-static
+ * member.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_member_object_pointer
+ : integral_constant<bool, _RW::__rw_is_member_object_pointer<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_cat
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is a pointer to non-static
+ * member function.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_member_function_pointer
+ : integral_constant<bool, _RW::__rw_is_member_function_pointer<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_cat
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is an enumeration type.
+ *
+ * @note This may not be accurate if the necessary compiler support
+ * is not available.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_enum
+ : integral_constant<bool, _RW::__rw_is_enum<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_cat
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is a union type
+ *
+ * @note This may not be accurate if the necessary compiler support
+ * is not available.
+ */
+template <class _TypeT>
+struct is_union
+ : integral_constant<bool, _RW::__rw_is_union<_TypeT>::value >
+{
+};
+
+/**
+ * @ingroup meta_unary_cat
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is a class type but not
+ * a union type.
+ *
+ * @note This may not be accurate if the necessary compiler support
+ * is not available.
+ * @note a C++ struct is of class type.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_class
+ : integral_constant<bool, _RW::__rw_is_class<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_cat
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is a function type.
+ *
+ * @note This may not be accurate if the necessary compiler support
+ * is not available.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_function
+ : integral_constant<bool, _RW::__rw_is_function<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_comp
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is an arithmetic type.
+ * Arithmetic types include both integral and floating point types.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_arithmetic
+ : integral_constant<bool, _RW::__rw_is_arithmetic<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_comp
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is a fundamental type.
+ * Fundamental types are all the types provided natively. These types
+ * include all arithmetic types and all void types.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_fundamental
+ : integral_constant<bool, _RW::__rw_is_fundamental<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_comp
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is an object type.
+ * An object type is a (possibly cv-qualified) type that is not
+ * a function type, not a reference type, and not a void type.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_object
+ : integral_constant<bool, _RW::__rw_is_object<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_comp
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is a scalar type.
+ * Arithmetic types, enumeration types, pointer types, pointer
+ * to member types, and cv-qualified versions of these types are
+ * collectively called scalar types.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_scalar
+ : integral_constant<bool, _RW::__rw_is_scalar<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_comp
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is a compound type.
+ * Compound types are arrays, functions, pointers, references,
+ * classes, unions, enumerations and pointers to non-static class
+ * members.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_compound
+ : integral_constant<bool, _RW::__rw_is_compound<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_comp
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is a pointer to a member
+ * object or pointer to member function type.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_member_pointer
+ : integral_constant<bool, _RW::__rw_is_member_pointer<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_prop
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is const-qualified.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_const
+ : integral_constant<bool, _RW::__rw_is_const<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_prop
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is volatile-qualified.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_volatile
+ : integral_constant<bool, _RW::__rw_is_volatile<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_prop
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is a trivial type. Scalar
+ * types, trivial class types, arrays of such types and cv-qualified
+ * versions of these types are collectively called trival types. Trivial
+ * class types have a trivial default constructor, a trivial destructor
+ * a trivial copy constructor and a trivial copy assignment operator.
+ *
+ * @note This may not be accurate if the necessary compiler support
+ * is not available.
+ *
+ * @tparam _TypeT The type to evaluate. Shall be a complete type,
+ * an array of unknown bound, or possibly cv-qualified void.
+ */
+template <class _TypeT>
+struct is_trivial
+ : integral_constant<bool, _RW::__rw_is_trivial<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_prop
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is a type with standard
+ * layout. Scalar types, standard-layout class types, arrays of such
+ * types and cv-qualified versions of these types are collectively
+ * called standard layout types. Standard layout class types have no
+ * non-static data members of non-standard-layout class or reference.
+ * They have no virtual functions and no virtual base classes, use the
+ * same access control for all non-static data members, have no base
+ * classes of non-standard-layout type, no non-static data members in
+ * the most-derived class and at most one base class with non-static
+ * data members or has no base classes with non-static data members.
+ * Finally, a standard-layout class has no base classes of the same
+ * type as the first non-static data member.
+ *
+ * @note This may not be accurate if the necessary compiler support
+ * is not available.
+ *
+ * @tparam _TypeT The type to evaluate. Shall be a complete type,
+ * an array of unknown bound, or possibly cv-qualified void.
+ */
+template <class _TypeT>
+struct is_standard_layout
+ : integral_constant<bool, _RW::__rw_is_standard_layout<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_prop
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is a plain-old-data type.
+ * Scalar types, pod classes, arrays of such types and cv-qualified
+ * versions of these types are collectively called pod types. The pod
+ * class types meet the requirements of both trivial and standard layout
+ * types and have no non-static data members of non-pod type.
+ *
+ * @note This may not be accurate if the necessary compiler support
+ * is not available.
+ *
+ * @tparam _TypeT The type to evaluate. Shall be a complete type,
+ * an array of unknown bound, or possibly cv-qualified void.
+ */
+template <class _TypeT>
+struct is_pod
+ : integral_constant<bool, _RW::__rw_is_pod<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_prop
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is an empty class.
+ *
+ * @note This may not be accurate if the necessary compiler support
+ * is not available.
+ *
+ * @tparam _TypeT The type to evaluate. Shall be a complete type,
+ * an array of unknown bound, or possibly cv-qualified void.
+ */
+template <class _TypeT>
+struct is_empty
+ : integral_constant<bool, _RW::__rw_is_empty<_TypeT>::value>
+{
+};
-#endif // _RWSTD_NO_EXT_CXX_0X
+/**
+ * @ingroup meta_unary_prop
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is a polymorphic class.
+ *
+ * @note This may not be accurate if the necessary compiler support
+ * is not available.
+ *
+ * @tparam _TypeT The type to evaluate. Shall be a complete type,
+ * an array of unknown bound, or possibly cv-qualified void.
+ */
+template <class _TypeT>
+struct is_polymorphic
+ : integral_constant<bool, _RW::__rw_is_polymorphic<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_prop
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is an abstract class.
+ *
+ * @note This may not be accurate if the necessary compiler support
+ * is not available.
+ *
+ * @tparam _TypeT The type to evaluate. Shall be a complete type,
+ * an array of unknown bound, or possibly cv-qualified void.
+ */
+template <class _TypeT>
+struct is_abstract
+ : integral_constant<bool, _RW::__rw_is_abstract<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_prop
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is a trivial type or a
+ * class type with a trivial default constructor, or an array of
+ * such a class type.
+ *
+ * @note This may not be accurate for class types if the necessary
+ * compiler support is not available.
+ *
+ * @tparam _TypeT The type to evaluate. Shall be a complete type,
+ * an array of unknown bound, or possibly cv-qualified void.
+ */
+template <class _TypeT>
+struct has_trivial_default_constructor
+ : integral_constant<bool, _RW::__rw_has_trivial_ctor<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_prop
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is a trivial type, a
+ * reference type, or a class type with a trivial copy constructor.
+ *
+ * @note This may not be accurate for class types if the necessary
+ * compiler support is not available.
+ *
+ * @tparam _TypeT The type to evaluate. Shall be a complete type,
+ * an array of unknown bound, or possibly cv-qualified void.
+ */
+template <class _TypeT>
+struct has_trivial_copy_constructor
+ : integral_constant<bool, _RW::__rw_has_trivial_copy<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_prop
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is neither const nor a
+ * reference type and is a trivial type or a class type with a trivial
+ * assignment operator.
+ *
+ * @note This may not be accurate for class types if the necessary
+ * compiler support is not available.
+ *
+ * @tparam _TypeT The type to evaluate. Shall be a complete type,
+ * an array of unknown bound, or possibly cv-qualified void.
+ */
+template <class _TypeT>
+struct has_trivial_assign
+ : integral_constant<bool, _RW::__rw_has_trivial_assign<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_prop
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is a trivial type, a reference
+ * type, or a class type with a trivial destructor, or an array of such a
+ * class type.
+ *
+ * @note This may not be accurate for class types if the necessary
+ * compiler support is not available.
+ *
+ * @tparam _TypeT The type to evaluate. Shall be a complete type,
+ * an array of unknown bound, or possibly cv-qualified void.
+ */
+template <class _TypeT>
+struct has_trivial_destructor
+ : integral_constant<bool, _RW::__rw_has_trivial_dtor<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_prop
+ *
+ * \e UnaryTypeTrait to determine if the default constructor for _TypeT
+ * has an empty exception specification or can otherwise be deduced to
+ * never throw an exception.
+ *
+ * @note This may not be accurate for class types if the necessary
+ * compiler support is not available.
+ *
+ * @tparam _TypeT The type to evaluate. Shall be a complete type,
+ * an array of unknown bound, or possibly cv-qualified void.
+ */
+template <class _TypeT>
+struct has_nothrow_default_constructor
+ : integral_constant<bool, _RW::__rw_has_nothrow_ctor<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_prop
+ *
+ * \e UnaryTypeTrait to determine if the copy constructor for _TypeT has
+ * an empty exception specification or can otherwise be deduced to never
+ * throw an exception.
+ *
+ * @note This may not be accurate for class types if the necessary
+ * compiler support is not available.
+ *
+ * @tparam _TypeT The type to evaluate. Shall be a complete type,
+ * an array of unknown bound, or possibly cv-qualified void.
+ */
+template <class _TypeT>
+struct has_nothrow_copy_constructor
+ : integral_constant<bool, _RW::__rw_has_nothrow_copy<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_prop
+ *
+ * \e UnaryTypeTrait to determine if the assignment operator has an empty
+ * exception specification or can otherwise be deduced never to throw an
+ * exception.
+ *
+ * @note This may not be accurate for class types if the necessary
+ * compiler support is not available.
+ *
+ * @tparam _TypeT The type to evaluate. Shall be a complete type,
+ * an array of unknown bound, or possibly cv-qualified void.
+ */
+template <class _TypeT>
+struct has_nothrow_assign
+ : integral_constant<bool, _RW::__rw_has_nothrow_assign<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_prop
+ *
+ * \e UnaryTypeTrait to determine if _TypeT has a virtual destructor.
+ *
+ * @note This may not be accurate for class types if the necessary
+ * compiler support is not available.
+ *
+ * @tparam _TypeT The type to evaluate. Shall be a complete type,
+ * an array of unknown bound, or possibly cv-qualified void.
+ */
+template <class _TypeT>
+struct has_virtual_destructor
+ : integral_constant<bool, _RW::__rw_has_virtual_dtor<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_prop
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is a signed arithmetic
+ * type.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_signed
+ : integral_constant<bool, _RW::__rw_is_signed<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_prop
+ *
+ * \e UnaryTypeTrait to determine if _TypeT is an unsigned arithmetic
+ * type.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct is_unsigned
+ : integral_constant<bool, _RW::__rw_is_unsigned<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_prop
+ *
+ * \e UnaryTypeTrait to determine the alignment of objects of type
+ * _TypeT.
+ *
+ * @note This may not be accurate if the necessary compiler support
+ * is not available.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct alignment_of
+ : integral_constant<_RWSTD_SIZE_T, _RW::__rw_alignment_of<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_prop
+ *
+ * \e UnaryTypeTrait to determine the rank of objects of type _TypeT.
+ * If _TypeT names an array type, the rank is an integer value that
+ * represents the number of dimensions of _TypeT, otherwise the value
+ * is 0.
+ *
+ * @tparam _TypeT The type to evaluate.
+ */
+template <class _TypeT>
+struct rank
+ : integral_constant<_RWSTD_SIZE_T, _RW::__rw_rank<_TypeT>::value>
+{
+};
+
+/**
+ * @ingroup meta_unary_prop
+ *
+ * \e UnaryTypeTrait to determine if the extent of one dimension of
+ * objects of type _TypeT. If _TypeT is an array type with rank greater
+ * than _Bound, the value will be the size of the given dimension of
+ * that array, otherwise the value is 0.
+ *
+ * @tparam _TypeT The type to evaluate.
+ * @tparam _Bound The dimension of the array to get the extent of.
+ */
+template <class _TypeT, unsigned _Bound = 0>
+struct extent
+ : integral_constant<_RWSTD_SIZE_T, _RW::__rw_extent<_TypeT, _Bound>::value>
+{
+};
+
+/**
+ * @ingroup meta_rel
+ *
+ * \e UnaryTypeTrait to determine if _TypeT and _TypeU are exactly the
+ * same type.
+ *
+ * @tparam _TypeT The first type to compare.
+ * @tparam _TypeT The second type to compare.
+ */
+template <class _TypeT, class _TypeU>
+struct is_same
+ : integral_constant<bool, _RW::__rw_is_same<_TypeT, _TypeU>::value>
+{
+};
+
+/**
+ * @ingroup meta_rel
+ *
+ * \e BinaryyTypeTrait to determine if _TypeT is a base class of _TypeU
+ * or _TypeT and _TypeU name the same non-union class type without regard
+ * to cv-qualifiers.
+ *
+ * @note Base classes that are private, protected or ambiguous are,
+ * nonetheless, base classes.
+ *
+ * @note This may not be accurate for class types if the necessary
+ * compiler support is not available.
+ *
+ * @tparam _TypeT The base type.
+ * @tparam _TypeU The derived type.
+ */
+template <class _TypeT, class _TypeU>
+struct is_base_of
+ : integral_constant<bool, _RW::__rw_is_base_of<_TypeT, _TypeU>::value>
+{
+};
+
+/**
+ * @ingroup meta_rel
+ *
+ * \e BinaryTypeTrait to determine if lvalue of type _TypeT is implicitly
+ * convertible to _TypeU ([conv]).
+ *
+ * @note This may not be accurate for class types if the necessary
+ * compiler support is not available.
+ *
+ * @tparam _TypeT The type to test conversion from.
+ * @tparam _TypeT The type to test conversion to.
+ */
+template <class _TypeT, class _TypeU>
+struct is_convertible
+ : integral_constant<bool, _RW::__rw_is_convertible<_TypeT, _TypeU>::value>
+{
+};
+
+/**
+ * @ingroup meta_trans_cv
+ *
+ * \e TransformationTrait to remove any top-level const-qualifier.
+ * The member typedef \c type shall be the same as _TypeT except that
+ * any top level const-qualifier has been removed.
+ *
+ * @tparam _TypeT The type to transform.
+ */
+template <class _TypeT>
+struct remove_const
+{
+ typedef _TYPENAME _RW::__rw_remove_const<_TypeT>::type type;
+};
+
+/**
+ * @ingroup meta_trans_cv
+ *
+ * \e TransformationTrait to remove any top-level volatile-qualifier.
+ * The member typedef \c type shall be the same as _TypeT except that
+ * any top level volatile-qualifier has been removed.
+ *
+ * @tparam _TypeT The type to transform.
+ */
+template <class _TypeT>
+struct remove_volatile
+{
+ typedef _TYPENAME _RW::__rw_remove_volatile<_TypeT>::type type;
+};
+
+/**
+ * @ingroup meta_trans_cv
+ *
+ * \e TransformationTrait to remove any top-level cv-qualifiers. The
+ * member typedef \c type shall be the same as _TypeT except that any
+ * top level cv-qualifier has been removed.
+ *
+ * @tparam _TypeT The type to transform.
+ */
+template <class _TypeT>
+struct remove_cv
+{
+ typedef _TYPENAME _RW::__rw_remove_cv<_TypeT>::type type;
+};
+
+/**
+ * @ingroup meta_trans_cv
+ *
+ * \e TransformationTrait to add a top-level const-qualifier. If
+ * _TypeT is a reference, function, or other type level const-
+ * qualified type then \c type shall be the same as _TypeT,
+ * otherwise _TypeT const.
+ *
+ * @tparam _TypeT The type to transform.
+ */
+template <class _TypeT>
+struct add_const
+{
+ typedef _TYPENAME _RW::__rw_add_const<_TypeT>::type type;
+};
+
+/**
+ * @ingroup meta_trans_cv
+ *
+ * \e TransformationTrait to add a top-level volatile-qualifier.
+ * If _TypeT is a reference, function, or other type level volatile-
+ * qualified type then \c type shall be the same as _TypeT,
+ * otherwise _TypeT volatile.
+ *
+ * @tparam _TypeT The type to transform.
+ */
+template <class _TypeT>
+struct add_volatile
+{
+ typedef _TYPENAME _RW::__rw_add_volatile<_TypeT>::type type;
+};
+
+/**
+ * @ingroup meta_trans_cv
+ *
+ * \e TransformationTrait to add a top-level const and volatile-qualifier.
+ *
+ * @tparam _TypeT The type to transform.
+ */
+template <class _TypeT>
+struct add_cv
+{
+ typedef _TYPENAME _RW::__rw_add_cv<_TypeT>::type type;
+};
+
+/**
+ * @ingroup meta_trans_ref
+ *
+ * \e TransformationTrait to remove a reference from _TypeT.
+ *
+ * The member typedef \c type shall be the same as _TypeT, except
+ * any reference qualifier has been removed.
+ *
+ * @tparam _TypeT The type to transform.
+ */
+template <class _TypeT>
+struct remove_reference
+{
+ typedef _TYPENAME _RW::__rw_remove_reference<_TypeT>::type type;
+};
+
+/**
+ * @ingroup meta_trans_ref
+ *
+ * \e TransformationTrait to add a reference to _TypeT.
+ *
+ * @tparam _TypeT The type to transform.
+ */
+template <class _TypeT>
+struct add_lvalue_reference
+{
+ typedef _TYPENAME _RW::__rw_add_lvalue_reference<_TypeT>::type type;
+};
+
+/**
+ * @ingroup meta_trans_ref
+ *
+ * \e TransformationTrait to add an rvalue-reference to _TypeT.
+ *
+ * @tparam _TypeT The type to transform.
+ */
+template <class _TypeT>
+struct add_rvalue_reference
+{
+ typedef _TYPENAME _RW::__rw_add_rvalue_reference<_TypeT>::type type;
+};
+
+/**
+ * @ingroup meta_trans_sign
+ *
+ * \e TransformationTrait to get a signed type from an enum or non-
+ * boolean integral type.
+ *
+ * @tparam _TypeT The type to transform.
+ */
+template <class _TypeT>
+struct make_signed
+{
+ typedef _TYPENAME _RW::__rw_make_signed<_TypeT>::type type;
+};
+
+/**
+ * @ingroup meta_trans_sign
+ *
+ * \e TransformationTrait to get an unsigned type from an enum or non-
+ * boolean integral type.
+ *
+ * @tparam _TypeT The type to transform.
+ */
+template <class _TypeT>
+struct make_unsigned
+{
+ typedef _TYPENAME _RW::__rw_make_unsigned<_TypeT>::type type;
+};
+
+/**
+ * @ingroup meta_trans_arr
+ *
+ * \e TransformationTrait to remove a dimension from the type _TypeT.
+ * If _TypeT is 'array of _TypeU', the member typedef \c type shall
+ * be _TypeU, otherwise _TypeT.
+ *
+ * @tparam _TypeT The type to transform.
+ */
+template <class _TypeT>
+struct remove_extent
+{
+ typedef _TYPENAME _RW::__rw_remove_extent<_TypeT>::type type;
+};
+
+/**
+ * @ingroup meta_trans_arr
+ *
+ * \e TransformationTrait to remove all dimensions from the type
+ * _TypeT. If _TypeT is 'multi-dimensional array of _TypeU', the
+ * member typedef \c type shall be _TypeU otherwise _TypeT.
+ *
+ * @tparam _TypeT The type to transform.
+ */
+template <class _TypeT>
+struct remove_all_extents
+{
+ typedef _TYPENAME _RW::__rw_remove_all_extents<_TypeT>::type type;
+};
+
+/**
+ * @ingroup meta_trans_pointer
+ *
+ * \e TransformationTrait to remove a pointer from the type _TypeT.
+ * The member typedef \c type shall be the same as _TypeT, except
+ * any top level indirection has been removed.
+ *
+ * @note pointers to members are left unchanged.
+ *
+ * @tparam _TypeT The type to transform.
+ */
+template <class _TypeT>
+struct remove_pointer
+{
+ typedef _TYPENAME _RW::__rw_remove_pointer<_TypeT>::type type;
+};
+
+/**
+ * @ingroup meta_trans_pointer
+ *
+ * \e TransformationTrait to add a pointer to the type _TypeT.
+ *
+ * @tparam _TypeT The type to transform.
+ */
+template <class _TypeT>
+struct add_pointer
+{
+ typedef _TYPENAME _RW::__rw_add_pointer<_TypeT>::type type;
+};
+
+/**
+ * @ingroup meta_trans_other
+ *
+ * Special trait the defines a nested pod type that is suitable for
+ * use as uninitialized storage for any object whose size is at most
+ * _Len and alignment is a divisor of align.
+ *
+ * @tparam _Len The minimum size of the aligned storage. Shall not be 0.
+ * @tparam _Align The alignment of the aligned storage. Shall be equal
+ * to alignment_of<T> for some type T or not provided. The implementation
+ * requires that the alignment value be a non-zero power of two that is
+ * less than the maximum supported extended alignment.
+ */
+template <_RWSTD_SIZE_T _Len,
+ _RWSTD_SIZE_T _Align = _RW::__rw_default_alignment<_Len>::value>
+struct aligned_storage
+{
+ typedef _TYPENAME _RW::__rw_aligned_storage<_Len, _Align>::type type;
+};
+
+#ifndef _RWSTD_NO_VARIADIC_TEMPLATES
+
+/**
+ * @ingroup meta_trans_other
+ *
+ * Special trait the defines a nested pod type that is suitable for
+ * use as uninitialized storage for any object whose type is listed
+ * in _Types and whose size is at most _Len.
+ *
+ * @tparam _Len The minimum size of the aligned storage.
+ * @tparam _Types List of types which might be stored.
+ */
+template <_RWSTD_SIZE_T _Len, class _TypeT, class... _Types>
+struct aligned_union
+ : _RW::__rw_aligned_union<_Len, _TypeT, _Types...>
+{
+};
+
+#else
+
+/**
+ * @ingroup meta_trans_other
+ *
+ * Special trait the defines a nested pod type that is suitable for
+ * use as uninitialized storage for any object whose type is listed
+ * in _Types and whose size is at most _Len.
+ *
+ * @tparam _Len The minimum size of the aligned storage.
+ * @tparam _Type1 Type which might be stored.
+ * @tparam _Type2 Type which might be stored.
+ * @tparam _Type3 Type which might be stored.
+ * @tparam _Type4 Type which might be stored.
+ * @tparam _Type5 Type which might be stored.
+ * @tparam _Type6 Type which might be stored.
+ * @tparam _Type7 Type which might be stored.
+ * @tparam _Type8 Type which might be stored.
+ */
+template <_RWSTD_SIZE_T _Len,
+ class _Type1 , class _Type2 = _RW::__rw_empty,
+ class _Type3 = _RW::__rw_empty, class _Type4 = _RW::__rw_empty,
+ class _Type5 = _RW::__rw_empty, class _Type6 = _RW::__rw_empty,
+ class _Type7 = _RW::__rw_empty, class _Type8 = _RW::__rw_empty>
+struct aligned_union
+ : _RW::__rw_aligned_union<_Len,
+ _Type1, _Type2, _Type3, _Type4,
+ _Type5, _Type6, _Type7, _Type8>
+{
+};
+
+#endif
+
+/**
+ * @ingroup meta_trans_other
+ *
+ * \e TransformationTrait to do array-to-pointer and function-to-pointer
+ * type conversions.
+ *
+ * Let \c U be \c remove_reference<T>::type. If \c is_array<U>::value is
+ * true, the member typedef type shall equal remove_extent<U>::type*. If
+ * \c is_function<U>::value is true, the member typedef shall equal
+ * \c add_pointer<U>::type. Otherwise the member typedef type equals \c U.
+ *
+ * @tparam _TypeT The type to transform.
+ */
+template <class _TypeT>
+struct decay
+{
+ typedef _TYPENAME _RW::__rw_decay<_TypeT>::type type;
+};
+
+/**
+ * @ingroup meta_trans_other
+ *
+ * If _Enable is true, the member typedef \c type shall equal _TypeT;
+ * otherwise, there shall be no member typedef \c type.
+ *
+ * @tparam _Enable Flag used to select the primary template or the
+ * specialization.
+ * @tparam _TypeT The type of the member typedef if _Enable is true.
+ */
+template <bool _Enable, class _TypeT = void>
+struct enable_if
+{
+ typedef _TypeT type;
+};
+
+template <class _TypeT>
+struct enable_if<false, _TypeT>
+{
+};
+
+/**
+ * @ingroup meta_trans_other
+ *
+ * If _Select is true, the member typedef \c type shall equal _TypeT
+ * otherwise \c type shall equal _TypeU.
+ *
+ * @tparam _Select Flag used to select the primary template or the
+ * specialization.
+ * @tparam _TypeT The type of the member typedef if _Select is true.
+ * @tparam _TypeU The type of the member typedef if _Select is false.
+ */
+template <bool _Select, class _TypeT, class _TypeU>
+struct conditional
+{
+ typedef _TYPENAME
+ _RW::__rw_conditional<_Select, _TypeT, _TypeU>::type type;
+};
+
+} // namespace std
#endif // _RWSTD_TYPE_TRAITS_INCLUDED
Modified: stdcxx/trunk/tests/utilities/20.meta.help.cpp
URL: http://svn.apache.org/viewvc/stdcxx/trunk/tests/utilities/20.meta.help.cpp?rev=671667&r1=671666&r2=671667&view=diff
==============================================================================
--- stdcxx/trunk/tests/utilities/20.meta.help.cpp (original)
+++ stdcxx/trunk/tests/utilities/20.meta.help.cpp Wed Jun 25 14:33:39 2008
@@ -1,7 +1,7 @@
// -*- C++ -*-
/***************************************************************************
*
- * 20.meta.help.cpp - test exercising tr.meta.help
+ * 20.meta.help.cpp - test exercising meta.help
*
* $Id$
*
@@ -23,17 +23,17 @@
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*
- * Copyright 1999-2008 Rogue Wave Software, Inc.
+ * Copyright 2008 Rogue Wave Software, Inc.
*
**************************************************************************/
-#include <type_traits>
-
#include <rw_driver.h>
// compile out all test code if extensions disabled
#ifndef _RWSTD_NO_EXT_CXX_0X
+#include <type_traits>
+
/**************************************************************************/
template <class T, class U>
@@ -249,7 +249,7 @@
int main (int argc, char *argv[])
{
return rw_test (argc, argv, __FILE__,
- "tr.meta.help",
+ "meta.help",
0 /* no comment */,
run_test,
0);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic