re PR libstdc++/13860 (Poor error messages on invalid template parameters for basic_filebuf)

PR libstdc++/13860
	* include/std/fstream (basic_filebuf): Enforce requirements on traits.

From-SVN: r210231
This commit is contained in:
Jonathan Wakely 2014-05-08 19:30:14 +01:00 committed by Jonathan Wakely
parent 2793eeab54
commit 2735097a55
2 changed files with 17 additions and 0 deletions

View File

@ -11,6 +11,9 @@
(swap(basic_streambuf&)): Define for C++11.
* testsuite/27_io/basic_streambuf/cons/57394.cc: New.
PR libstdc++/13860
* include/std/fstream (basic_filebuf): Enforce requirements on traits.
2014-05-08 Paolo Carlini <paolo.carlini@oracle.com>
* acinclude.m4 ([GLIBCXX_ENABLE_C99]): Avoid -Wwrite-strings warning.

View File

@ -71,6 +71,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _CharT, typename _Traits>
class basic_filebuf : public basic_streambuf<_CharT, _Traits>
{
#if __cplusplus >= 201103L
template<typename _Tp>
using __chk_state = __and_<is_copy_assignable<_Tp>,
is_copy_constructible<_Tp>,
is_default_constructible<_Tp>>;
static_assert(__chk_state<typename _Traits::state_type>::value,
"state_type must be CopyAssignable, CopyConstructible"
" and DefaultConstructible");
static_assert(is_same<typename _Traits::pos_type,
fpos<typename _Traits::state_type>>::value,
"pos_type must be fpos<state_type>");
#endif
public:
// Types:
typedef _CharT char_type;