2008-04-24  Martin Sebor  <sebor@roguewave.com>

	Merged revs 648509 and 648403 from trunk.

        2008-04-15  Martin Sebor  <sebor@roguewave.com>

        STDCXX-832
        * include/string.cc (_C_get_rep): Used two static_casts via void*
        instead of a single reinterpret_cast to prevent HP aCC 6 warning
        #4232: conversion from "wchar_t*" to a more strictly aligned type.

	2008-04-15  Martin Sebor  <sebor@roguewave.com>

	STDCXX-874
	* include/string (__rw_replace, __rw_replace_aux): Decorated
	exported templates with the export keyword.
	* include/string.cc: Same.


git-svn-id: https://svn.apache.org/repos/asf/stdcxx/branches/4.2.x@651447 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/include/string b/include/string
index 482f8e1..8196a54 100644
--- a/include/string
+++ b/include/string
@@ -56,12 +56,14 @@
 #ifndef _RWSTD_NO_MEMBER_TEMPLATES
 #  ifdef _RWSTD_NO_STRING_OUTLINED_MEMBER_TEMPLATES
 
+_EXPORT
 template <class _CharT, class _Traits, class _Alloc,
           class _StringIter, class _InputIter>
 std::basic_string<_CharT, _Traits, _Alloc>& 
 __rw_replace (std::basic_string<_CharT, _Traits, _Alloc>&, 
               _StringIter, _StringIter, _InputIter, _InputIter);
 
+_EXPORT
 template <class _CharT, class _Traits, class _Alloc,
           class _StringIter, class _InputIter>
 std::basic_string<_CharT, _Traits, _Alloc>& 
diff --git a/include/string.cc b/include/string.cc
index e4a8923..767efad 100644
--- a/include/string.cc
+++ b/include/string.cc
@@ -22,7 +22,7 @@
  * implied.   See  the License  for  the  specific language  governing
  * permissions and limitations under the License.
  *
- * Copyright 1994-2006 Rogue Wave Software.
+ * Copyright 1994-2008 Rogue Wave Software, Inc.
  * 
  **************************************************************************/
 
@@ -101,10 +101,11 @@
 
     // allocate, initialize the __string_ref, and initialize each character
     _C_string_ref_type* const __ret =
-    _RWSTD_REINTERPRET_CAST (_C_string_ref_type*,
-        _RWSTD_VALUE_ALLOC (_C_value_alloc_type, *this,
-            allocate (__cap + sizeof (_C_string_ref_type) /
-                          sizeof (value_type) + 2)));
+        _RWSTD_STATIC_CAST (_C_string_ref_type*,
+            _RWSTD_STATIC_CAST (void*,
+                _RWSTD_VALUE_ALLOC (_C_value_alloc_type, *this,
+                    allocate (  __cap + sizeof (_C_string_ref_type)
+                              / sizeof (value_type) + 2))));
 
     // avoid copy construction (mutex isn't copy-constructible)
     // _C_ref_alloc_type (*this).construct (__ret, _C_string_ref_type ());
@@ -464,6 +465,7 @@
 
 #  ifdef _RWSTD_NO_STRING_OUTLINED_MEMBER_TEMPLATES
 
+_EXPORT
 template <class _CharT, class _Traits, class _Alloc,
           class _StringIter, class _InputIter>
 _STD::basic_string<_CharT, _Traits, _Alloc>& 
@@ -561,6 +563,7 @@
 
 #  ifdef _RWSTD_NO_STRING_OUTLINED_MEMBER_TEMPLATES
 
+_EXPORT
 template <class _CharT, class _Traits, class _Alloc,
           class _StringIter, class _InputIter>
 _STD::basic_string<_CharT, _Traits, _Alloc>&