libstdc++-v3: 2013-06-14 Joern Rennecke <joern.renne...@embecosm.com>
* include/bits/locale_facets_nonio.h (__tm_small_int): typedef/define. (_M_extract_num): Templatize base type of __member argument. (_M_extract_name): Change type of __member argument to __tm_small_int&. * include/bits/locale_facets_nonio.tcc (_M_extract_via_format) <Z>: Change type of __tmp to __tm_small_int. (_M_extract_num): Templatize base type of __member argument. (_M_extract_name): Change type of __member argument to __tm_small_int&. Index: include/bits/locale_facets_nonio.h =================================================================== --- include/bits/locale_facets_nonio.h (revision 216243) +++ include/bits/locale_facets_nonio.h (working copy) @@ -42,6 +42,15 @@ namespace std _GLIBCXX_VISIBILITY(defaul { _GLIBCXX_BEGIN_NAMESPACE_VERSION +#ifdef __AVR__ +/* The struct tm defined in avr-libc/include/time.h uses int8_t for a number + of fields. To allow overload resolution to succeed, we need to adjust + some data structures and functions to match. */ +typedef typeof (((tm*)0)->tm_sec) __tm_small_int; +#else /* For 100% mangling compatibility, use int directly. */ +#define __tm_small_int int +#endif + /** * @brief Time format ordering data. * @ingroup locales @@ -654,14 +663,16 @@ namespace std _GLIBCXX_VISIBILITY(defaul ios_base::iostate& __err, tm* __tm) const; // Extract numeric component of length __len. + template <typename _Member_t> iter_type - _M_extract_num(iter_type __beg, iter_type __end, int& __member, + _M_extract_num(iter_type __beg, iter_type __end, _Member_t& __member, int __min, int __max, size_t __len, ios_base& __io, ios_base::iostate& __err) const; // Extract any unique array of string literals in a const _CharT* array. iter_type - _M_extract_name(iter_type __beg, iter_type __end, int& __member, + _M_extract_name(iter_type __beg, iter_type __end, + __tm_small_int& __member, const _CharT** __names, size_t __indexlen, ios_base& __io, ios_base::iostate& __err) const; Index: include/bits/locale_facets_nonio.tcc =================================================================== --- include/bits/locale_facets_nonio.tcc (revision 216243) +++ include/bits/locale_facets_nonio.tcc (working copy) @@ -796,7 +796,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul // Timezone info. if (__ctype.is(ctype_base::upper, *__beg)) { - int __tmp; + __tm_small_int __tmp; __beg = _M_extract_name(__beg, __end, __tmp, __timepunct_cache<_CharT>::_S_timezones, 14, __io, __tmperr); @@ -837,9 +837,10 @@ namespace std _GLIBCXX_VISIBILITY(defaul } template<typename _CharT, typename _InIter> + template<typename _Member_t> _InIter time_get<_CharT, _InIter>:: - _M_extract_num(iter_type __beg, iter_type __end, int& __member, + _M_extract_num(iter_type __beg, iter_type __end, _Member_t& __member, int __min, int __max, size_t __len, ios_base& __io, ios_base::iostate& __err) const { @@ -882,7 +883,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul template<typename _CharT, typename _InIter> _InIter time_get<_CharT, _InIter>:: - _M_extract_name(iter_type __beg, iter_type __end, int& __member, + _M_extract_name(iter_type __beg, iter_type __end, __tm_small_int& __member, const _CharT** __names, size_t __indexlen, ios_base& __io, ios_base::iostate& __err) const {