From 1a1aed246641008d32b13e1950f8b2412ad49e74 Mon Sep 17 00:00:00 2001 From: Paolo Carlini <pcarlini@unitus.it> Date: Mon, 17 Feb 2003 21:07:48 +0100 Subject: [PATCH] re PR libstdc++/9580 (basic_filebuf<> with custom traits_type fails to link) 2003-02-17 Paolo Carlini <pcarlini@unitus.it> PR libstdc++/9580 * include/std/std_fstream.h: Declare underflow and uflow specializations, change generic definitions to do nothing. * src/fstream.cc: Add underflow and uflow specializations. From-SVN: r63008 --- libstdc++-v3/ChangeLog | 7 +++++++ libstdc++-v3/include/std/std_fstream.h | 23 +++++++++++++++++++---- libstdc++-v3/src/fstream.cc | 20 ++++++++++++++++++++ 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 75d729b48214..14268113aaee 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2003-02-17 Paolo Carlini <pcarlini@unitus.it> + + PR libstdc++/9580 + * include/std/std_fstream.h: Declare underflow and uflow + specializations, change generic definitions to do nothing. + * src/fstream.cc: Add underflow and uflow specializations. + 2003-02-17 Paolo Carlini <pcarlini@unitus.it> PR libstdc++/9169 diff --git a/libstdc++-v3/include/std/std_fstream.h b/libstdc++-v3/include/std/std_fstream.h index 6a5e3bc127b8..d7a0e0956bdf 100644 --- a/libstdc++-v3/include/std/std_fstream.h +++ b/libstdc++-v3/include/std/std_fstream.h @@ -439,23 +439,38 @@ namespace std basic_filebuf<char>::int_type basic_filebuf<char>::_M_underflow_common(bool __bump); + template<> + basic_filebuf<char>::int_type + basic_filebuf<char>::underflow(); + + template<> + basic_filebuf<char>::int_type + basic_filebuf<char>::uflow(); + #ifdef _GLIBCPP_USE_WCHAR_T template<> basic_filebuf<wchar_t>::int_type basic_filebuf<wchar_t>::_M_underflow_common(bool __bump); + + template<> + basic_filebuf<wchar_t>::int_type + basic_filebuf<wchar_t>::underflow(); + + template<> + basic_filebuf<wchar_t>::int_type + basic_filebuf<wchar_t>::uflow(); #endif - // Generic definitions. + // Generic definitions do nothing. template <typename _CharT, typename _Traits> typename basic_filebuf<_CharT, _Traits>::int_type basic_filebuf<_CharT, _Traits>::underflow() - { return _M_underflow_common(false); } + { return int_type(); } template <typename _CharT, typename _Traits> typename basic_filebuf<_CharT, _Traits>::int_type basic_filebuf<_CharT, _Traits>::uflow() - { return _M_underflow_common(true); } - + { return int_type(); } // [27.8.1.5] Template class basic_ifstream /** diff --git a/libstdc++-v3/src/fstream.cc b/libstdc++-v3/src/fstream.cc index be711339b72f..944bae27c381 100644 --- a/libstdc++-v3/src/fstream.cc +++ b/libstdc++-v3/src/fstream.cc @@ -100,6 +100,16 @@ namespace std return __ret; } + template<> + basic_filebuf<char>::int_type + basic_filebuf<char>::underflow() + { return _M_underflow_common(false); } + + template<> + basic_filebuf<char>::int_type + basic_filebuf<char>::uflow() + { return _M_underflow_common(true); } + #ifdef _GLIBCPP_USE_WCHAR_T template<> basic_filebuf<wchar_t>::int_type @@ -189,5 +199,15 @@ namespace std _M_last_overflowed = false; return __ret; } + + template<> + basic_filebuf<wchar_t>::int_type + basic_filebuf<wchar_t>::underflow() + { return _M_underflow_common(false); } + + template<> + basic_filebuf<wchar_t>::int_type + basic_filebuf<wchar_t>::uflow() + { return _M_underflow_common(true); } #endif } // namespace std -- GitLab