[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