Author: faridz Date: Fri Sep 29 06:06:27 2006 New Revision: 451275 URL: http://svn.apache.org/viewvc?view=rev&rev=451275 Log: 2006-09-29 Farid Zaripov <[EMAIL PROTECTED]>
* _num_put.cc (__rw_iter_failed): Removed const to resolve ambiguity on MSVC 7.0 * _select.h [_RWSTD_NO_CLASS_PARTIAL_SPEC]: Added __rw_is_same for compilers which not support the partial template specialization * file.cpp: Declare fileno() only if it not declared in CRT header, but present in libc * NEW_THROWS.cpp: Returned 1 if operator new doesn't throws Modified: incubator/stdcxx/trunk/etc/config/src/NEW_THROWS.cpp incubator/stdcxx/trunk/include/loc/_num_put.cc incubator/stdcxx/trunk/include/rw/_select.h incubator/stdcxx/trunk/src/file.cpp Modified: incubator/stdcxx/trunk/etc/config/src/NEW_THROWS.cpp URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/etc/config/src/NEW_THROWS.cpp?view=diff&rev=451275&r1=451274&r2=451275 ============================================================================== --- incubator/stdcxx/trunk/etc/config/src/NEW_THROWS.cpp (original) +++ incubator/stdcxx/trunk/etc/config/src/NEW_THROWS.cpp Fri Sep 29 06:06:27 2006 @@ -115,7 +115,5 @@ return 0; } - printf ("#define _RWSTD_NO_NEW_THROWS\n"); - - return 0; + return 1; } Modified: incubator/stdcxx/trunk/include/loc/_num_put.cc URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/include/loc/_num_put.cc?view=diff&rev=451275&r1=451274&r2=451275 ============================================================================== --- incubator/stdcxx/trunk/include/loc/_num_put.cc (original) +++ incubator/stdcxx/trunk/include/loc/_num_put.cc Fri Sep 29 06:06:27 2006 @@ -42,13 +42,15 @@ inline bool __rw_iter_failed (const _OutputIter&) { return false; } +// const commented to resolve ambiguity on MSVC 7.0: +// error C2667: '__rw_iter_failed' : none of 2 overloads have a best conversion template <class _CharT, class _Traits> inline bool -__rw_iter_failed (const _STD::ostreambuf_iterator<_CharT, _Traits> &__it) +__rw_iter_failed (/*const */_STD::ostreambuf_iterator<_CharT, _Traits> &__it) { return __it.failed (); } - + } // namespace __rw Modified: incubator/stdcxx/trunk/include/rw/_select.h URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/include/rw/_select.h?view=diff&rev=451275&r1=451274&r2=451275 ============================================================================== --- incubator/stdcxx/trunk/include/rw/_select.h (original) +++ incubator/stdcxx/trunk/include/rw/_select.h Fri Sep 29 06:06:27 2006 @@ -90,6 +90,8 @@ #endif +#ifndef _RWSTD_NO_CLASS_PARTIAL_SPEC + template <class _TypeT, class _TypeU> struct __rw_is_same { @@ -97,8 +99,6 @@ enum { _C_val }; }; -#ifndef _RWSTD_NO_CLASS_PARTIAL_SPEC - template <class _TypeT> struct __rw_is_same<_TypeT, _TypeT> { @@ -108,23 +108,35 @@ #else // if defined (_RWSTD_NO_CLASS_PARTIAL_SPEC) -_RWSTD_SPECIALIZED_CLASS -struct __rw_is_same<char, char> +template <bool flag> +struct __rw_bool_t { - typedef __rw_true_t _C_type; - enum { _C_val = 1 }; + typedef __rw_false_t _C_type; }; -# ifndef _RWSTD_NO_WCHAR_T - _RWSTD_SPECIALIZED_CLASS -struct __rw_is_same<wchar_t, wchar_t> +struct __rw_bool_t<true> { typedef __rw_true_t _C_type; - enum { _C_val = 1 }; }; -# endif // _RWSTD_NO_WCHAR_T +template <class _TypeT, class _TypeU> +struct __rw_is_same +{ + struct yes {}; + struct no { yes no_ [2]; }; + template <class T> + struct Type {}; + + static yes test (Type<_TypeT>, Type<_TypeT>); + static no test (...); + + enum { _C_val = sizeof (test (Type<_TypeT> (), + Type<_TypeU> ())) == sizeof (yes) }; + + typedef _TYPENAME __rw_bool_t<_C_val>::_C_type _C_type; +}; + #endif // _RWSTD_NO_CLASS_PARTIAL_SPEC Modified: incubator/stdcxx/trunk/src/file.cpp URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/src/file.cpp?view=diff&rev=451275&r1=451274&r2=451275 ============================================================================== --- incubator/stdcxx/trunk/src/file.cpp (original) +++ incubator/stdcxx/trunk/src/file.cpp Fri Sep 29 06:06:27 2006 @@ -2,7 +2,7 @@ * * support.cpp - definition of support functions and objects * - * $Id: //stdlib/dev/source/stdlib/file.cpp#3 $ + * $Id$ * *************************************************************************** * @@ -78,12 +78,18 @@ #endif // _RWSTD_NO_MKSTEMP[_IN_LIBC] +#if defined (_RWSTD_NO_FILENO) && !defined (_RWSTD_NO_FILENO_IN_LIBC) + // declare fileno in case it's not declared (for strict ANSI conformance) extern "C" { _RWSTD_DLLIMPORT int (fileno)(FILE*) _LIBC_THROWS (); +# undef _RWSTD_NO_FILENO + } // extern "C" + +#endif // _RWSTD_NO_FILENO && !_RWSTD_NO_FILENO_IN_LIBC _RWSTD_NAMESPACE (__rw) {