mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-02 16:23:56 +08:00
C++STYLE: Add exception bits.
2003-12-01 Benjamin Kosnik <bkoz@redhat.com> * docs/html/17_intro/C++STYLE: Add exception bits. * include/bits/fstream.tcc: Add location info to exception strings. * include/bits/stl_construct.h: Formatting tweaks. From-SVN: r74119
This commit is contained in:
parent
aa66a642c1
commit
d78e147a14
@ -1,3 +1,10 @@
|
||||
2003-12-01 Benjamin Kosnik <bkoz@redhat.com>
|
||||
|
||||
* docs/html/17_intro/C++STYLE: Add exception bits.
|
||||
* include/bits/fstream.tcc: Add location info to exception strings.
|
||||
|
||||
* include/bits/stl_construct.h: Formatting tweaks.
|
||||
|
||||
2003-12-01 Paolo Carlini <pcarlini@suse.de>
|
||||
|
||||
PR libstdc++/10378
|
||||
|
@ -200,7 +200,25 @@ Notable areas of divergence from what may be previous local practice
|
||||
For more explanation and examples, see src/globals.cc. All such
|
||||
variables should be contained in that file, for simplicity.
|
||||
|
||||
15. Exception abstractions
|
||||
Use the exception abstractions found in functexcept.h, which allow
|
||||
C++ programmers to use this library with -fno-exceptions. (Even if
|
||||
that is rarely advisable, it's a necessary evil for backwards
|
||||
compatibility.)
|
||||
|
||||
16. Exception error messages
|
||||
All start with the name of the function where the exception is
|
||||
thrown, and then (optional) descriptive text is added. Example:
|
||||
|
||||
__throw_logic_error("basic_string::_S_construct NULL not valid");
|
||||
|
||||
Reason: The verbose terminate handler prints out exception::what(),
|
||||
as well as the typeinfo for the thrown exception. As this is the
|
||||
default terminate handler, by putting location info into the
|
||||
exception string, a very useful error message is printed out for
|
||||
uncaught exceptions. So useful, in fact, that non-programmers can
|
||||
give useful error messages, and programmers can intelligently
|
||||
speculate what went wrong without even using a debugger.
|
||||
|
||||
The library currently has a mixture of GNU-C and modern C++ coding
|
||||
styles. The GNU C usages will be combed out gradually.
|
||||
|
@ -254,7 +254,8 @@ namespace std
|
||||
// codecvt::max_length() is bogus.
|
||||
if (_M_ext_end - _M_ext_buf + __rlen > _M_ext_buf_size)
|
||||
{
|
||||
__throw_ios_failure("codecvt::max_length() "
|
||||
__throw_ios_failure("basic_filebuf::underflow "
|
||||
"codecvt::max_length() "
|
||||
"is not valid");
|
||||
}
|
||||
streamsize __elen = _M_file.xsgetn(_M_ext_end, __rlen);
|
||||
@ -305,10 +306,12 @@ namespace std
|
||||
// However, reaching it while looping on partial means that
|
||||
// the file has got an incomplete character.
|
||||
if (__r == codecvt_base::partial)
|
||||
__throw_ios_failure("incomplete character in file");
|
||||
__throw_ios_failure("basic_filebuf::underflow "
|
||||
"incomplete character in file");
|
||||
}
|
||||
else
|
||||
__throw_ios_failure("invalid byte sequence in file");
|
||||
__throw_ios_failure("basic_filebuf::underflow "
|
||||
"invalid byte sequence in file");
|
||||
}
|
||||
return __ret;
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
// nonstandard construct and destroy functions -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
|
||||
// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
@ -72,13 +72,13 @@ namespace std
|
||||
* object's constructor with an initializer.
|
||||
* @endif
|
||||
*/
|
||||
template <class _T1, class _T2>
|
||||
template<typename _T1, typename _T2>
|
||||
inline void
|
||||
_Construct(_T1* __p, const _T2& __value)
|
||||
{
|
||||
// _GLIBCXX_RESOLVE_LIB_DEFECTS
|
||||
// 402. wrong new expression in [some_]allocator::construct
|
||||
::new (static_cast<void*>(__p)) _T1(__value);
|
||||
::new(static_cast<void*>(__p)) _T1(__value);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -87,13 +87,13 @@ namespace std
|
||||
* object's default constructor (no initializers).
|
||||
* @endif
|
||||
*/
|
||||
template <class _T1>
|
||||
template<typename _T1>
|
||||
inline void
|
||||
_Construct(_T1* __p)
|
||||
{
|
||||
// _GLIBCXX_RESOLVE_LIB_DEFECTS
|
||||
// 402. wrong new expression in [some_]allocator::construct
|
||||
::new (static_cast<void*>(__p)) _T1();
|
||||
::new(static_cast<void*>(__p)) _T1();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -101,7 +101,7 @@ namespace std
|
||||
* Destroy the object pointed to by a pointer type.
|
||||
* @endif
|
||||
*/
|
||||
template <class _Tp>
|
||||
template<typename _Tp>
|
||||
inline void
|
||||
_Destroy(_Tp* __pointer)
|
||||
{ __pointer->~_Tp(); }
|
||||
@ -113,7 +113,7 @@ namespace std
|
||||
* This is a helper function used only by _Destroy().
|
||||
* @endif
|
||||
*/
|
||||
template <class _ForwardIterator>
|
||||
template<typename _ForwardIterator>
|
||||
inline void
|
||||
__destroy_aux(_ForwardIterator __first, _ForwardIterator __last, __false_type)
|
||||
{ for ( ; __first != __last; ++__first) std::_Destroy(&*__first); }
|
||||
@ -127,7 +127,7 @@ namespace std
|
||||
* This is a helper function used only by _Destroy().
|
||||
* @endif
|
||||
*/
|
||||
template <class _ForwardIterator>
|
||||
template<typename _ForwardIterator>
|
||||
inline void
|
||||
__destroy_aux(_ForwardIterator, _ForwardIterator, __true_type)
|
||||
{ }
|
||||
@ -139,7 +139,7 @@ namespace std
|
||||
* away, otherwise the objects' destructors must be invoked.
|
||||
* @endif
|
||||
*/
|
||||
template <class _ForwardIterator>
|
||||
template<typename _ForwardIterator>
|
||||
inline void
|
||||
_Destroy(_ForwardIterator __first, _ForwardIterator __last)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user