2007-09-14 15:45:36 +00:00
< html >
< head >
< meta http-equiv = "Content-Language" content = "en-us" >
< meta name = "GENERATOR" content = "Microsoft FrontPage 5.0" >
< meta name = "ProgId" content = "FrontPage.Editor.Document" >
< meta http-equiv = "Content-Type" content = "text/html; charset=windows-1252" >
< title > System Library Reference< / title >
< link rel = "stylesheet" type = "text/css" href = "../../../doc/html/minimal.css" >
< / head >
< body >
< table border = "0" cellpadding = "5" cellspacing = "0" style = "border-collapse: collapse" bordercolor = "#111111" width = "637" >
< tr >
< td width = "277" >
< a href = "../../../index.htm" >
< img src = "../../../boost.png" alt = "boost.png (6897 bytes)" align = "middle" width = "277" height = "86" border = "0" > < / a > < / td >
< td width = "337" align = "middle" >
< font size = "7" > System Library< / font >
< / td >
< / tr >
< / table >
< table border = "0" cellpadding = "5" cellspacing = "0" style = "border-collapse: collapse" bordercolor = "#111111" bgcolor = "#D7EEFF" width = "100%" >
< tr >
< td > < a href = "../../../index.htm" > Boost Home< / a > < a href = "index.html" >
Library Home< / a > Tutorial < a href = "reference.html" >
Reference< / a > < / td >
< / tr >
< / table >
< table border = "1" cellpadding = "5" cellspacing = "0" style = "border-collapse: collapse" bordercolor = "#111111" align = "right" >
< tr >
< td width = "100%" bgcolor = "#D7EEFF" align = "center" >
< i > < b > Contents< / b > < / i > < / td >
< / tr >
< tr >
< td width = "100%" bgcolor = "#E8F5FF" >
< a href = "#Introduction" > Introduction< / a > < br >
2007-11-12 15:22:24 +00:00
< a href = "#Macros" > Macros< / a > < br >
2008-10-12 13:27:59 +00:00
< a href = "#Deprecated-names" > Deprecated names< / a > < br >
2010-05-30 15:38:32 +00:00
< a href = "#Breaking-changes" > Breaking changes< / a > < br >
2007-09-14 15:45:36 +00:00
< a href = "#Header-error_code" > Header < boost/system/error_code.hpp> < / a > < br >
< a href = "#Class-error_category" > Class < code > error_category< / code > < / a > < br >
< a href = "#Class-error_category-synopsis" > Class < code > error_category< / code > synopsis< / a > < br >
< a href = "#Class-error_category-virtual-members" > Class < code > error_category< / code > virtual members< / a > < br >
< a href = "#Class-error_category-non-virtual-members" > Class < code > error_category< / code > non-virtual members< / a > < br >
2007-09-19 19:30:23 +00:00
< a href = "#Class-error_category-non-member-functions" > Class < code > error_category< / code >
non-member functions< / a > < br >
2007-09-14 15:45:36 +00:00
< a href = "#Class-error_category-predefined-objects" > Class < code > error_category< / code > predefined objects< / a > < br >
< a href = "#Class-error_code" > Class < code > error_code< / code > < / a > < br >
< a href = "#Class-error_code-synopsis" > Class < code > error_code< / code > synopsis< / a > < br >
< a href = "#Class-error_code-constructors" > Class < code > error_code< / code > constructors< / a > < br >
< a href = "#Class-error_code-modifiers" > Class < code > error_code< / code > modifiers< / a > < br >
< a href = "#Class-error_code-observers" > Class < code > error_code< / code > observers< / a > < br >
2010-04-20 18:49:18 +00:00
< a href = "#Class-error_condition" > Class < code > error_condition< / code > < / a > < br >
2007-09-14 15:45:36 +00:00
< a href = "#Class-error_condition-synopsis" > Class < code > error_condition< / code > synopsis< / a > < br >
< a href = "#Class-error_condition-constructors" > Class < code > error_condition< / code > constructors< / a > < br >
< a href = "#Class-error_condition-modifiers" > Class < code > error_condition< / code > modifiers< / a > < br >
< a href = "#Class-error_condition-observers" > Class < code > error_condition< / code > observers< / a > < br >
2008-10-05 13:02:01 +00:00
< a href = "#throws-object" > < code > throws< / code > object< / a > < br >
< a href = "#Semantics-of-throws" > Semantics of < code > throws< / code > object< / a > < br >
2007-09-14 15:45:36 +00:00
< a href = "#Non-member-functions" > Non-member functions< / a > < br >
< a href = "#Header-system_error" > Header < boost/system/system_error.hpp> < / a > < br >
< a href = "#Class-system_error" > Class < code > system_error< / code > < / a > < br >
< / td >
< / tr >
< / table >
< h2 > < a name = "Introduction" > Introduction< / a > < / h2 >
< p > This reference documentation describes components that
programs may use to report error conditions originating from the operating
system or other low-level application program interfaces.< / p >
2007-11-12 15:22:24 +00:00
< p > Boost.System library components never change the value of < code >
2007-09-14 15:45:36 +00:00
errno< / code > .< / p >
2007-11-12 15:22:24 +00:00
< h2 > < a name = "Macros" > Macros< / a > < / h2 >
< p > Users may defined the following macros if desired. Sensible defaults are
provided, so users may ignore these macros if they prefer.< / p >
2010-05-30 15:38:32 +00:00
< table border = "1" cellpadding = "5" cellspacing = "0" style = "border-collapse: collapse" bordercolor = "#111111" height = "368" >
2007-11-12 15:22:24 +00:00
< tr >
2010-05-30 15:38:32 +00:00
< td height = "16" > < b > < i > Macro Name< / i > < / b > < / td >
< td height = "16" > < b > < i > Default< / i > < / b > < / td >
< td height = "16" > < b > < i > Effect if defined< / i > < / b > < / td >
2007-11-12 15:22:24 +00:00
< / tr >
< tr >
2010-05-30 15:38:32 +00:00
< td valign = "top" height = "64" > < code > BOOST_SYSTEM_DYN_LINK< / code > < / td >
< td valign = "top" height = "64" > Defined if < code > BOOST_ALL_DYN_LINK< / code > is defined,
2007-11-12 15:22:24 +00:00
otherwise not defined.< / td >
2010-05-30 15:38:32 +00:00
< td valign = "top" height = "64" > Boost.System library is dynamically linked. If not defined,
2007-11-12 15:22:24 +00:00
static linking is assumed.< / td >
< / tr >
< tr >
2010-05-30 15:38:32 +00:00
< td valign = "top" height = "47" > < code > BOOST_SYSTEM_NO_LIB< / code > < / td >
< td valign = "top" height = "47" > Defined if < code > BOOST_ALL_NO_LIB< / code > is defined,
2007-11-12 15:22:24 +00:00
otherwise not defined.< / td >
2010-05-30 15:38:32 +00:00
< td valign = "top" height = "47" > Boost.System library does not use the Boost auto-link
2007-11-12 15:22:24 +00:00
facility.< / td >
< / tr >
< tr >
2010-05-30 15:38:32 +00:00
< td valign = "top" height = "32" > < code > BOOST_SYSTEM_NO_DEPRECATED< / code > < / td >
< td valign = "top" height = "32" > Not defined.< / td >
< td valign = "top" height = "32" > Deprecated features are excluded.< / td >
2007-11-12 15:22:24 +00:00
< / tr >
2010-05-30 15:38:32 +00:00
< / table >
2008-10-12 13:27:59 +00:00
< h2 > < a name = "Deprecated-names" > Deprecated names< / a > < / h2 >
2010-05-30 15:38:32 +00:00
< p > In the process of adding Boost.System to C++0x standard library, the C++
committee changed some
names. To ease transition, Boost.System deprecates the old
2008-10-12 13:27:59 +00:00
names, but continues to provide them unless macro < code > BOOST_SYSTEM_NO_DEPRECATED< / code >
is defined.< / p >
< table border = "1" cellpadding = "5" cellspacing = "1" style = "border-collapse: collapse" bordercolor = "#111111" >
< tr >
2010-05-30 15:38:32 +00:00
< td > < b > < i > Old usage, now deprecated< / i > < / b > < / td >
< td > < b > < i > Replacement< / i > < / b > < / td >
< / tr >
< tr >
< td > < code > get_generic_category()< / code > < / td >
< td > < code > generic_category()< / code > < / td >
< / tr >
< tr >
< td > < code > get_system_category()< / code > < / td >
< td > < code > system_category()< / code > < / td >
2008-10-12 13:27:59 +00:00
< / tr >
< tr >
< td > < code > namespace posix< / code > < / td >
< td > < code > namespace errc< / code > < / td >
< / tr >
< tr >
< td > < code > namespace posix_error< / code > < / td >
< td > < code > namespace errc< / code > < / td >
< / tr >
< tr >
< td > < code > enum posix_errno< / code > < / td >
< td > < code > enum errc_t< / code > < / td >
< / tr >
< tr >
< td > < code > get_posix_category()< / code > < / td >
2010-05-30 15:38:32 +00:00
< td > < code > generic_category()< / code > < / td >
2008-10-12 13:27:59 +00:00
< / tr >
< tr >
< td > < code > posix_category< / code > < / td >
2010-05-30 15:38:32 +00:00
< td > < code > generic_category()< / code > < / td >
2008-10-12 13:27:59 +00:00
< / tr >
< tr >
< td > < code > errno_ecat< / code > < / td >
2010-05-30 15:38:32 +00:00
< td > < code > generic_category()< / code > < / td >
2008-10-12 13:27:59 +00:00
< / tr >
< tr >
< td > < code > native_ecat< / code > < / td >
2010-05-30 15:38:32 +00:00
< td > < code > system_category()< / code > < / td >
2008-10-12 13:27:59 +00:00
< / tr >
< / table >
2010-05-30 15:38:32 +00:00
< h2 > < a name = "Breaking-changes" > Breaking changes< / a > < / h2 >
< p > Two static consts are replaced by functions. These are breaking changes best
fixed by globally adding () to these names to turn them into function calls.< / p >
< table border = "1" cellpadding = "5" cellspacing = "1" style = "border-collapse: collapse" bordercolor = "#111111" >
< tr >
< td > < b > < i > Old usage, now broken< / i > < / b > < / td >
< td > < b > < i > Replacement< / i > < / b > < / td >
< / tr >
< tr >
< td > < code > generic_category< / code > < / td >
< td > < code > generic_category()< / code > < / td >
< / tr >
< tr >
< td > < code > system_category< / code > < / td >
< td > < code > system_category()< / code > < / td >
< / tr >
< / table >
2010-05-31 11:57:01 +00:00
< p > User-defined BOOST_POSIX_API and BOOST_WINDOWS_API macros are no longer supported.< / p >
2007-09-14 15:45:36 +00:00
< h2 > < a name = "Header-error_code" > Header < boost/system/error_code.hpp> < / a > < / h2 >
< h3 > < boost/system/error_code.hpp> synopsis< / h3 >
< blockquote >
< pre > namespace boost
{
namespace system
{
class < a href = "#Class-error_category" > error_category< / a > ;
class < a href = "#Class-error_code" > error_code< / a > ;
class < a href = "#Class-error_condition" > error_condition< / a > ;
// "Concept" helpers
template< class T = "" >
struct is_error_code_enum { static const bool value = false; };
template< class T = "" >
struct is_error_condition_enum { static const bool value = false; };
2008-06-24 14:59:10 +00:00
// generic error_conditions
namespace errc
2007-09-14 15:45:36 +00:00
{
2008-06-24 14:59:10 +00:00
enum errc_t
2007-09-14 15:45:36 +00:00
{
success = 0,
address_family_not_supported, //EAFNOSUPPORT
address_in_use, //EADDRINUSE
address_not_available, //EADDRNOTAVAIL
already_connected, //EISCONN
argument_list_too_long, //E2BIG
argument_out_of_domain, //EDOM
bad_address, //EFAULT
bad_file_descriptor, //EBADF
bad_message, //EBADMSG
broken_pipe, //EPIPE
connection_aborted, //ECONNABORTED
connection_already_in_progress, //EALREADY
connection_refused, //ECONNREFUSED
connection_reset, //ECONNRESET
cross_device_link, //EXDEV
destination_address_required, //EDESTADDRREQ
device_or_resource_busy, //EBUSY
directory_not_empty, //ENOTEMPTY
executable_format_error, //ENOEXEC
file_exists, //EEXIST
file_too_large, //EFBIG
filename_too_long, //ENAMETOOLONG
function_not_supported, //ENOSYS
host_unreachable, //EHOSTUNREACH
identifier_removed, //EIDRM
illegal_byte_sequence, //EILSEQ
inappropriate_io_control_operation,//ENOTTY
interrupted, //EINTR
invalid_argument, //EINVAL
invalid_seek, //ESPIPE
io_error, //EIO
is_a_directory, //EISDIR
message_size, //EMSGSIZE
network_down, //ENETDOWN
network_reset, //ENETRESET
network_unreachable, //ENETUNREACH
no_buffer_space, //ENOBUFS
no_child_process, //ECHILD
no_link, //ENOLINK
no_lock_available, //ENOLCK
no_message_available, //ENODATA
no_message, //ENOMSG
no_protocol_option, //ENOPROTOOPT
no_space_on_device, //ENOSPC
no_stream_resources, //ENOSR
no_such_device_or_address, //ENXIO
no_such_device, //ENODEV
no_such_file_or_directory, //ENOENT
no_such_process, //ESRCH
not_a_directory, //ENOTDIR
not_a_socket, //ENOTSOCK
not_a_stream, //ENOSTR
not_connected, //ENOTCONN
not_enough_memory, //ENOMEM
not_supported, //ENOTSUP
operation_canceled, //ECANCELED
operation_in_progress, //EINPROGRESS
operation_not_permitted, //EPERM
operation_not_supported, //EOPNOTSUPP
operation_would_block, //EWOULDBLOCK
owner_dead, //EOWNERDEAD
permission_denied, //EACCES
protocol_error, //EPROTO
protocol_not_supported, //EPROTONOSUPPORT
read_only_file_system, //EROFS
resource_deadlock_would_occur, //EDEADLK
resource_unavailable_try_again, //EAGAIN
result_out_of_range, //ERANGE
state_not_recoverable, //ENOTRECOVERABLE
stream_timeout, //ETIME
text_file_busy, //ETXTBSY
timed_out, //ETIMEDOUT
too_many_files_open_in_system, //ENFILE
too_many_files_open, //EMFILE
too_many_links, //EMLINK
too_many_synbolic_link_levels, //ELOOP
value_too_large, //EOVERFLOW
wrong_protocol_type //EPROTOTYPE
};
2008-06-24 14:59:10 +00:00
} // namespace errc
2007-09-14 15:45:36 +00:00
2008-06-24 14:59:10 +00:00
template< > struct is_error_condition_enum< posix::posix_errno > < errc::errc_t>
2007-09-14 15:45:36 +00:00
{ static const bool value = true; };
2008-10-05 13:02:01 +00:00
// < a href = "#Non-member-functions" > non-member functions< / a >
2007-09-14 15:45:36 +00:00
bool operator==( const error_code & lhs, const error_code & rhs );
bool operator==( const error_code & code, const error_condition & condition );
bool operator==( const error_condition & condition, const error_code & code );
bool operator==( const error_condition & lhs, const error_condition & rhs );
bool operator!=( const error_code & lhs, const error_code & rhs );
bool operator!=( const error_code & code, const error_condition & condition );
bool operator!=( const error_condition & condition, const error_code & code );
bool operator!=( const error_condition & lhs, const error_condition & rhs );
bool operator< ( const error_code & lhs, const error_code & rhs );
bool operator< ( const error_condition & lhs, const error_condition & rhs );
2008-06-24 14:59:10 +00:00
error_code make_error_code( errc::errc_t e );
error_condition make_error_condition( errc::errc_t e );
2007-09-14 15:45:36 +00:00
template < class charT, class traits>
std::basic_ostream< charT,traits> &
operator< < ( basic_ostream< charT,traits> & os, const error_code & ec );
size_t hash_value( const error_code & ec );
}
}< / pre >
< / blockquote >
2008-06-24 14:59:10 +00:00
< p > The value of each< code > errc_t< / code > constant shall be the same as the
2007-09-14 15:45:36 +00:00
value of the < code > < cerrno> < / code > macro shown in the above synopsis.< / p >
< p > Users may specialize < code > is_error_code_enum< / code > and < code >
is_error_condition_enum< / code > templates to indicate that a type is eligible for
class < code > error_code< / code > and < code > error_condition< / code > automatic
conversions respectively.< / p >
< h2 > < a name = "Class-error_category" > Class < code > error_category< / code > < / a > < / h2 >
< p > The class < code > error_category< / code > defines the base class for types used
to identify the source and encoding of a particular category of error code.< / p >
< p > < i > [Note:< / i > Classes may be derived from < code > error_category< / code >
to support additional categories of errors. < i > --end note]< / i > < / p >
< p > The class < code > error_category< / code > serves as a base class for types used
to identify the source and encoding of a particular category of error code.
Classes may be derived from < code > error_category< / code > to support categories of
errors in addition to those defined in the Boost System library. Such classes
shall behave as specified in this subclause. [< i > Note:< / i > < code > error_category< / code >
objects are passed by reference, and two such objects are equal if they have the
same address. This means that applications using custom < code > error_category< / code >
types should create a single object of each such type. < i > <EFBFBD> end note< / i > ]< / p >
< h3 > < a name = "Class-error_category-synopsis" > Class < code > error_category< / code > synopsis< / a > < / h3 >
< blockquote >
< pre > namespace boost
{
namespace system
{
class error_category : public noncopyable
{
public:
virtual ~error_category();
virtual const char * name() const = 0;
2008-10-12 13:27:59 +00:00
virtual string message( int ev ) const = 0;
2007-09-14 15:45:36 +00:00
virtual error_condition default_error_condition( int ev ) const;
virtual bool equivalent( int code, const error_condition & condition ) const;
virtual bool equivalent( const error_code & code, int condition ) const;
bool operator==( const error_category & rhs ) const;
bool operator!=( const error_category & rhs ) const;
bool operator< ( const error_category & rhs ) const;
};
2010-05-30 15:38:32 +00:00
const error_category & system_category();
const error_category & generic_category();
2007-09-14 15:45:36 +00:00
}
}< / pre >
< / blockquote >
< h3 > < a name = "Class-error_category-virtual-members" > Class < code > error_category< / code > virtual members< / a > < / h3 >
< p > Classes derived from < code > error_category< / code > shall behave as specified in
this subclause.< / p >
< pre > virtual const char * name() const=0;< / pre >
< blockquote >
< p > < i > Returns: < / i > a string naming the error category.< / p >
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
2008-10-12 13:27:59 +00:00
< pre > virtual string message( int ev ) const=0;< / pre >
2007-09-14 15:45:36 +00:00
< blockquote >
< p > < i > Returns:< / i > A string that describes the error denoted by
< code > ev< / code > .< / p >
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
< p > < code > virtual error_condition default_error_condition( int ev ) const;< / code > < / p >
< blockquote >
< p > < i > Returns:< / i > < code > error_condition( ev, *this )< / code > .< / p >
< blockquote >
< p > [< i > --Note:< / i > Derived classes will typically convert < code > ev< / code >
2008-06-24 14:59:10 +00:00
to some portable < code > error_category< / code > , such as < code > generic_category< / code > ,
2007-09-14 15:45:36 +00:00
and return it as an < code > error_condition< / code > for that category. < i > --end
note< / i > ]< / p >
< / blockquote >
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
< p > < code > virtual bool equivalent( int code, const error_condition &
condition )
const;< / code > < / p >
< blockquote >
< p > < i > Returns:< / i > < code > default_error_condition( code ) == condition< / code > .< / p >
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
< p > < code > virtual bool equivalent( const error_code & code, int condition ) const;< / code > < / p >
< blockquote >
< p > < i > Returns:< / i > < code > *this == code.category() & & code.value() == condition< / code > .< / p >
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
< h3 > < a name = "Class-error_category-non-virtual-members" > Class < code > error_category< / code > non-virtual members< / a > < / h3 >
< p > < code > bool operator==( const error_category & rhs ) const;< / code > < / p >
< blockquote >
< p > < i > Returns:< / i > < code > this == & rhs< / code > .< / p >
< / blockquote >
< p > < code > bool operator!=( const error_category & rhs ) const;< / code > < / p >
< blockquote >
< p > < i > Returns:< / i > < code > this != & rhs< / code > .< / p >
< / blockquote >
< pre > bool operator< ( const error_category & rhs ) const;< / pre >
< blockquote >
< p > < i > Returns:< / i > < code > std::less< const error_category*> ()( this, & rhs )< / code > .< / p >
< blockquote >
< p > < i > [Note:< / i > < code > std::less< / code > provides a total ordering for
pointers. < i > --end note]< / i > < / p >
< / blockquote >
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
2007-09-19 19:30:23 +00:00
< h3 > < a name = "Class-error_category-non-member-functions" > Class < code > error_category< / code >
non-member functions< / a > < / h3 >
2010-05-30 15:38:32 +00:00
< pre > const error_category & system_category();< / pre >
2007-09-19 19:30:23 +00:00
< blockquote >
< p > < i > Returns:< / i > A reference to a < code > error_category< / code > object
identifying errors originating from the operating system.< / p >
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
2010-05-30 15:38:32 +00:00
< pre > const error_category & generic_category();< / pre >
2007-09-19 19:30:23 +00:00
< blockquote >
< p > < i > Returns:< / i > A reference to a < code > error_category< / code > object
identifying portable error conditions.< / p >
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
2007-09-14 15:45:36 +00:00
< h3 > < a name = "Class-error_category-predefined-objects" > Class < code > error_category< / code >
predefined objects< / a > < / h3 >
2007-09-19 19:30:23 +00:00
< p > Predefined objects < code > system_category< / code >
2008-10-05 13:02:01 +00:00
and < code > generic_category< / code > identify system specific error codes and portable error conditions, respectively.< / p >
2007-09-14 15:45:36 +00:00
< h2 > < a name = "Class-error_code" > Class < code >
error_code< / code > < / a > < / h2 >
< p > The class < code > error_code< / code > describes an object used to hold error code
values, such as those originating from the operating< br >
system or other low-level application program interfaces. < i > [ Note: < / i > Class
< code > error_code< / code > is an adjunct to error reporting by< br >
exception. < i > <EFBFBD> end note ]< / i > < / p >
< h3 > < a name = "Class-error_code-synopsis" > Class < code >
error_code< / code > synopsis< / a > < / h3 >
< blockquote >
< pre > namespace boost
{
namespace system
{
class error_code {
public:
// constructors:
error_code();
error_code( val, const error_category & cat );
template < class < code > ErrorCodeEnum< / code > >
2008-10-12 13:27:59 +00:00
error_code(< code > ErrorCodeEnum< / code > e,
2007-09-14 15:45:36 +00:00
typename enable_if< is_error_code_enum< < code > ErrorCodeEnum< / code > > > ::type* = 0);
// modifiers:
void assign( int val, const error_category & cat );
template< typename < code > ErrorCodeEnum< / code > >
typename enable_if< is_error_code_enum< < code > ErrorCodeEnum< / code > > , error_code> ::type &
operator=( < code > ErrorCodeEnum< / code > val );;
void clear();
// observers:
int value() const;
cont error_category & category() const;
error_condition default_error_condition() const;
string message() const;
operator unspecified-bool-type() const;
private:
int val_; // < i > exposition only< / i >
2008-10-12 13:27:59 +00:00
const error_category * cat_; // < i > exposition only< / i >
2007-09-14 15:45:36 +00:00
};
}
}< / pre >
< / blockquote >
< h3 > < a name = "Class-error_code-constructors" > Class < code >
error_code< / code > constructors< / a > < / h3 >
< pre > error_code();< / pre >
< blockquote >
< p > < i > Effects: < / i > Constructs an object of type < code > error_code< / code > .< / p >
< p > < i > Postconditions:< / i > < code > val_ == 0 & & cat_ == & system_category< / code > .< / p >
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
< pre > error_code( int val, const error_category & cat );< / pre >
< blockquote >
< p > < i > Effects: < / i > Constructs an object of type < code > error_code< / code > .< / p >
< p > < i > Postconditions:< / i > < code > val_ == val & & cat_ == & cat< / code > .< / p >
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
< pre > template < class < code > ErrorCodeEnum< / code > >
error_code(< code > errorCodeEnum< / code > val,
typename enable_if< is_error_code_enum< < code > ErrorCodeEnum< / code > > > ::type* = 0);< / pre >
< blockquote >
< p > < i > Effects: < / i > Constructs an object of type < code > error_code< / code > .< / p >
< p > < i > Postconditions:< / i > < code > *this == make_error_code( val )< / code > .< / p >
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
< h3 > < a name = "Class-error_code-modifiers" > Class < code >
error_code< / code > modifiers< / a > < / h3 >
< pre > void assign( int val, const error_category & cat );< / pre >
< blockquote >
2008-10-12 13:27:59 +00:00
< p > < i > Postconditions:< / i > < code > val_ == val & & cat_ == & cat< / code > .< / p >
2007-09-14 15:45:36 +00:00
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
< pre > template< typename < code > ErrorCodeEnum< / code > >
typename enable_if< is_error_code_enum< < code > ErrorCodeEnum< / code > > , error_code> ::type &
operator=( < code > ErrorCodeEnum< / code > val );< / pre >
< blockquote >
< p > < i > Postconditions:< / i > < code > *this == make_error_code( val )< / code > .< / p >
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
< p > < code > void clear();< / code > < / p >
< blockquote >
2008-06-24 14:59:10 +00:00
< p > < i > postcondition:< / i > < code > value() == 0 & & category() == generic_category< / code > < / p >
2007-09-14 15:45:36 +00:00
< / blockquote >
< h3 > < a name = "Class-error_code-observers" > Class < code >
error_code< / code > observers< / a > < / h3 >
< p > < code > int value() const;< / code > < / p >
< blockquote >
< p > < i > Returns:< / i > < code > val_< / code > .< / p >
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
2008-10-12 13:27:59 +00:00
< p > < code > const error_category & category() const;< / code > < / p >
2007-09-14 15:45:36 +00:00
< blockquote >
2008-10-12 13:27:59 +00:00
< p > < i > Returns:< / i > < code > *cat_< / code > .< / p >
2007-09-14 15:45:36 +00:00
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
< pre > error_condition default_error_condition() const;< / pre >
< blockquote >
< p > < i > Returns:< / i > < code > category().default_error_condition( value())< / code > .< / p >
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
< p > < code > string message() const;< / code > < / p >
< blockquote >
< p > < i > Returns:< / i > < code > category().message( value())< / code > .< / p >
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
< p > < code > operator < i > unspecified-bool-type< / i > () const;< / code > < / p >
< blockquote >
2008-10-12 13:27:59 +00:00
< p > < i > Returns:< / i > if < code > value() != 0< / code > , returns a value that will evaluate
2007-09-14 15:45:36 +00:00
< code > true< / code > in a boolean context; otherwise, returns a value that will
evaluate < code > false< / code > in a boolean context. The value type returned shall
not be convertible to < code > int< / code > .< / p >
< p > < i > Throws:< / i > nothing.< / p >
< p > < i > [Note: < / i > This conversion can be used in contexts where a < code > bool< / code >
is expected ( e.g., an < code > if< / code > condition ); however, implicit conversions
( e.g., to < code > int< / code > ) that can occur with < code > bool< / code > are not
allowed, eliminating some sources of user error. One possible implementation
choice for this type is pointer-to-member. < i > --end note ]< / i > < / p >
< / blockquote >
< h2 > < a name = "Class-error_condition" > Class < code > error_condition< / code > < / a > < / h2 >
< p > The class < code > error_condition< / code > describes an object used to hold
values identifying error conditions. < i > [ Note: < / i > < code > error_condition< / code >
values are portable abstractions, while < code > error_code< / code > values are
implementation specific. < i > --end note ]< / i > < / p >
< h3 > < a name = "Class-error_condition-synopsis" > Class < code > error_condition< / code > synopsis< / a > < / h3 >
< blockquote >
< pre > namespace boost
{
namespace system
{
class error_condition
{
public:
// constructors:
error_condition();
error_condition( int val, const error_category & cat );
template < class ErrorConditionEnum>
error_condition( errorConditionEnum val,
typename enable_if< is_error_condition_enum< ErrorConditionEnum> > ::type* = 0 );
// modifiers:
void assign( int val, const error_category & cat );
template< typename ErrorConditionEnum>
typename enable_if< is_error_condition_enum< ErrorConditionEnum> , error_code> ::type &
operator=( ErrorConditionEnum val );
void clear();
// observers:
int value() const;
const error_category & category() const;
string message() const;
operator unspecified-bool-type () const;
private:
2008-10-12 13:27:59 +00:00
int val_; // < i > exposition only< / i >
const error_category * cat_; // < i > exposition only< / i >
2007-09-14 15:45:36 +00:00
};
}
}< / pre >
< / blockquote >
< h3 > < a name = "Class-error_condition-constructors" > Class < code > error_condition< / code >
constructors< / a > < / h3 >
< pre > error_condition(); < / pre >
< blockquote >
< p > < i > Effects:< / i > Constructs an object of type < code > error_condition< / code > .< / p >
2008-10-12 13:27:59 +00:00
< p > < i > Postconditions:< / i > < code > val_ == 0 and cat_ == & generic_category< / code > .< / p >
2007-09-14 15:45:36 +00:00
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
2008-10-12 13:27:59 +00:00
< pre > error_condition( int val, const error_category & cat );< / pre >
2007-09-14 15:45:36 +00:00
< blockquote >
< p > < i > Effects: < / i > Constructs an object of type error_condition.< / p >
2008-10-12 13:27:59 +00:00
< p > < i > Postconditions:< / i > < code > val_ == val and cat_ == & cat< / code > .< / p >
2007-09-14 15:45:36 +00:00
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
< pre > template < class ErrorConditionEnum>
error_condition( errorConditionEnum val,
typename enable_if< is_error_condition_enum< ErrorConditionEnum> > ::type* = 0 );< / pre >
< blockquote >
< p > < i > Effects:< / i > Constructs an object of type < code > error_condition< / code > .< / p >
< p > < i > Postconditions:< / i > < code > *this == make_error_condition( val )< / code > .< / p >
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
< h3 > < a name = "Class-error_condition-modifiers" > Class < code > error_condition< / code >
modifiers< / a > < / h3 >
2008-10-12 13:27:59 +00:00
< pre > void assign( int val, const error_category & cat ); < / pre >
2007-09-14 15:45:36 +00:00
< blockquote >
2008-10-12 13:27:59 +00:00
< p > < i > Postconditions:< / i > < code > val_ == val and cat_ == & cat< / code > . < / p >
2007-09-14 15:45:36 +00:00
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
< pre > template< typename ErrorConditionEnum>
typename enable_if< is_error_condition_enum< ErrorConditionEnum> , error_code> ::type &
operator=( ErrorConditionEnum val );< / pre >
< blockquote >
< p > < i > Postconditions:< / i > < code > *this == make_error_condition( val )< / code > .< / p >
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
< p > < code > void clear();< / code > < / p >
< blockquote >
2008-06-24 14:59:10 +00:00
< p > < i > postcondition:< / i > < code > value() == 0 & & category() == generic_category< / code > < / p >
2007-09-14 15:45:36 +00:00
< / blockquote >
< h3 > < a name = "Class-error_condition-observers" > Class < code > error_condition< / code >
observers< / a > < / h3 >
2008-10-12 13:27:59 +00:00
< pre > int value() const;< / pre >
2007-09-14 15:45:36 +00:00
< blockquote >
< p > < i > Returns:< / i > < code > val_< / code > .< / p >
< p > < i > Throws:< / i > Nothing< / p >
< / blockquote >
< pre > const error_category & category() const;< / pre >
< blockquote >
2008-10-12 13:27:59 +00:00
< p > < i > Returns:< / i > < code > *cat_< / code > .< / p >
2007-09-14 15:45:36 +00:00
< p > Throws: Nothing.< / p >
< / blockquote >
< pre > string message() const;< / pre >
< blockquote >
< p > < i > Returns:< / i > < code > category().message( value() )< / code > .< / p >
< p > < i > Throws:< / i > Nothing.< / p >
< / blockquote >
< pre > operator unspecified-bool-type () const;< / pre >
< blockquote >
< p > < i > Returns: < / i > If < code > value() != 0< / code > , returns a value that will
evaluate < code > true< / code > in a boolean context; otherwise, returns a value
that will evaluate < code > false< / code > . The return type shall not be
convertible to < code > int< / code > . < / p >
< p > < i > Throws:< / i > Nothing.< / p >
< p > < i > [ Note:< / i > This conversion can be used in contexts where a < code > bool< / code >
is expected ( e.g., an if condition ); however, implicit conversions ( e.g., to
< code > int< / code > ) that can occur with < code > bool< / code > are not allowed,
eliminating some sources of user error. One possible implementation choice for
this type is pointer to member. < i > --end note< / i > < i > ]< / i > < / p >
< / blockquote >
2008-10-05 13:02:01 +00:00
< h2 > < a name = "throws-object" > < code > throws< / code > object< / a > < / h2 >
< pre > extern error_code throws;< / pre >
< p > The predefined < code > error_code< / code > object < code > throws< / code > is supplied
for use as a " throw on error" tag.< / p >
< h2 > < a name = "Semantics-of-throws" > Semantics of < code > throws< / code > < / a > object< / h2 >
< p > Functions that specify an argument in the form < code > error_code& ec=throws< / code > ,
with appropriate namespace qualifiers, have the following error handling
semantics:< / p >
< blockquote >
2008-10-08 14:16:05 +00:00
< p > < i > Postconditions:< / i > < / p >
< blockquote >
< p > If < code > & ec != & throws< / code > and an error occurred:< / p >
< ul >
< li > < code > ec.value()< / code > returns the implementation specific error
number for the particular error that occurred.< / li >
< li > < code > ec.category()< / code > returns the < code >
< a href = "#Class-error_category" > error_category< / a > < / code > for < code > ec.value()< / code > .< / li >
< / ul >
< p > if < code > & ec != & throws< / code > and an error did not occur, < code > ec.clear()< / code > .< / p >
< / blockquote >
< p > < i > Throws:< / i > < / p >
< blockquote >
< p > If an error occurs and < code > & ec == & throws< / code > , throws an exception of type
2008-10-05 13:02:01 +00:00
< code > < a href = "#Class-system_error" > system_error< / a > < / code > or of a type
2008-10-08 14:16:05 +00:00
derived from < code > < a href = "#Class-system_error" > system_error< / a > < / code > . The
exception's < code > code()< / code > member function returns a reference to an
< code > error_code< / code > object with the behavior specified in < i >
Postconditions< / i > .< / p >
< / blockquote >
2008-10-05 13:02:01 +00:00
< / blockquote >
< h2 > < a name = "Non-member-functions" > Non-member functions< / a > < / h2 >
2007-09-14 15:45:36 +00:00
< pre > bool operator==( const error_code & lhs, const error_code & rhs );< / pre >
< blockquote >
< p > < i > Returns:< / i > < code > lhs.category() == rhs.category() & & lhs.value() ==
rhs.value()< / code > .< / p >
< p > < i > Throws: < / i > Nothing.< / p >
< / blockquote >
< pre > bool operator==( const error_code & code, const error_condition & condition );
bool operator==( const error_condition & condition, const error_code & code );< / pre >
< blockquote >
< p > < i > Returns:< / i > < code > code.category().equivalent( code.value(), condition )< br >
|| condition.category().equivalent( code, condition.value() )< / code > .< / p >
< p > < i > Throws: < / i > Nothing.< / p >
< / blockquote >
< pre > bool operator==( const error_condition & lhs, const error_condition & rhs );< / pre >
< blockquote >
< p > < i > Returns:< / i > < code > lhs.category() == rhs.category() & & lhs.value() ==
rhs.value()< / code > .< / p >
< p > < i > Throws: < / i > Nothing.< / p >
< / blockquote >
< pre > bool operator!=( const error_code & lhs, const error_code & rhs );< / pre >
< blockquote >
< p > < i > Returns:< / i > < code > !(lhs == rhs )< / code > .< / p >
< p > < i > Throws: < / i > Nothing.< / p >
< / blockquote >
< pre > bool operator!=( const error_code & code, const error_condition & condition );
bool operator!=( const error_condition & condition, const error_code & code );< / pre >
< blockquote >
< p > < i > Returns:< / i > < code > !( code == condition )< / code > .< / p >
< p > < i > Throws: < / i > Nothing.< / p >
< / blockquote >
< pre > bool operator!=( const error_condition & lhs, const error_condition & rhs );< / pre >
< blockquote >
< p > < i > Returns:< / i > < code > !(lhs == rhs )< / code > .< / p >
< p > < i > Throws: < / i > Nothing.< / p >
< / blockquote >
< pre > bool operator< ( const error_code & lhs, const error_code & rhs );< / pre >
< blockquote >
< p > < i > Returns:< / i > < code > lhs.category() < rhs.category()< br >
|| (lhs.category() == rhs.category() & & lhs.value() < rhs.value())< / code > .< / p >
< p > < i > Throws: < / i > Nothing.< / p >
< / blockquote >
< pre > bool operator< ( const error_condition & lhs, const error_condition & rhs );< / pre >
< blockquote >
< p > < i > Returns:< / i > < code > lhs.category() < rhs.category()< br >
|| (lhs.category() == rhs.category() & & lhs.value() < rhs.value())< / code > .< / p >
< p > < i > Throws: < / i > Nothing.< / p >
< / blockquote >
2008-06-24 14:59:10 +00:00
< pre > error_code make_error_code( errc::errc_t e );< / pre >
2007-09-14 15:45:36 +00:00
< blockquote >
2008-06-24 14:59:10 +00:00
< p > < i > Returns:< / i > < code > error_code( e, generic_category)< / code > .< / p >
2007-09-14 15:45:36 +00:00
< / blockquote >
2008-06-24 14:59:10 +00:00
< pre > error_condition make_error_condition( errc::errc_t e );< / pre >
2007-09-14 15:45:36 +00:00
< blockquote >
2008-10-12 13:27:59 +00:00
< p > < i > Returns:< / i > < code > error_condition( static_cast< int> ( e ), generic_category)< / code > .< / p >
2007-09-14 15:45:36 +00:00
< / blockquote >
< pre > template < class charT, class traits>
std::basic_ostream< charT,traits> &
operator< < ( basic_ostream< charT,traits> & os, const error_code & ec );< / pre >
< blockquote >
< p > < i > Effects:< / i > < code > os < < ec.category().name() < < ':' < < ec.value()< / code > .< / p >
< p > < i > Returns:< / i > < code > os< / code > .< / p >
< / blockquote >
< pre > size_t < a name = "hash_value" > hash_value< / a > ( const error_code & ec );< / pre >
< blockquote >
< p > < i > Returns: < / i > A hash value representing < code > ec< / code > .< / p >
< / blockquote >
< h2 > < a name = "Header-system_error" > Header < boost/system/system_error.hpp> < / a > < / h2 >
< h3 > < a name = "Class-system_error" > Class < code >
system_error< / code > < / a > < / h3 >
< p > The class < code > system_error< / code > describes an exception object used to
2008-10-05 13:02:01 +00:00
report errors that have an associated < code > < a href = "#Class-error_code" > error_code< / a > < / code > . Such errors typically originate from operating system or other low-level
2007-09-14 15:45:36 +00:00
application program interfaces.< / p >
< blockquote >
< pre > namespace boost
{
namespace system
{
class system_error : public std::runtime_error
{
public:
system_error( error_code ec );
2008-06-25 14:16:59 +00:00
system_error( error_code ec, const char * what_arg );
2007-09-14 15:45:36 +00:00
system_error( error_code ec, const std::string & what_arg );
2008-10-12 13:27:59 +00:00
system_error( int ev, const error_category & ecat,
2008-06-25 14:16:59 +00:00
const char * what_arg );
2008-10-12 13:27:59 +00:00
system_error( int ev, const error_category & ecat,
2007-09-14 15:45:36 +00:00
const std::string & what_arg );
2008-10-12 13:27:59 +00:00
system_error( int ev, const error_category & ecat);
2007-09-14 15:45:36 +00:00
const error_code & code() const throw();
const char * what() const throw();
};
}
}< / pre >
< / blockquote >
< pre > system_error( error_code ec );< / pre >
< blockquote >
< p > < i > Effects:< / i > Constructs an object of class < code > system_error< / code > .< / p >
< p > < i > Postcondition:< / i > < code > code() == ec < br >
& & std::strcmp( this-> runtime_error::what(), " " ) == 0< / code > < / p >
< / blockquote >
2008-06-25 14:16:59 +00:00
< pre > system_error( error_code ec, const char * what_arg );< / pre >
< blockquote >
< p > < i > Effects:< / i > Constructs an object of class < code > system_error< / code > .< / p >
< p > < i > Postcondition:< / i > < code > code() == ec < br >
& & std::strcmp( this-> runtime_error::what(), what_arg ) == 0< / code > < / p >
< / blockquote >
2007-09-14 15:45:36 +00:00
< pre > system_error( error_code ec, const std::string & what_arg );< / pre >
< blockquote >
< p > < i > Effects:< / i > Constructs an object of class < code > system_error< / code > .< / p >
< p > < i > Postcondition:< / i > < code > code() == ec < br >
& & std::strcmp( this-> runtime_error::what(), what_arg.c_str() ) == 0< / code > < / p >
< / blockquote >
2008-10-12 13:27:59 +00:00
< pre > system_error( int ev, const error_category & ecat,
2008-06-25 14:16:59 +00:00
const char * what_arg );< / pre >
< blockquote >
< p > < i > Effects:< / i > Constructs an object of class < code > system_error< / code > .< / p >
< p > < i > Postcondition:< / i > < code > code() == error_code( ev, ecat )< br >
& & std::strcmp( this-> runtime_error::what(), what_arg ) == 0< / code > < / p >
< / blockquote >
2008-10-12 13:27:59 +00:00
< pre > system_error( int ev, const error_category & ecat,
2007-09-14 15:45:36 +00:00
const std::string & what_arg );< / pre >
< blockquote >
< p > < i > Effects:< / i > Constructs an object of class < code > system_error< / code > .< / p >
< p > < i > Postcondition:< / i > < code > code() == error_code( ev, ecat )< br >
& & std::strcmp( this-> runtime_error::what(), what_arg.c_str() ) == 0< / code > < / p >
< / blockquote >
2008-10-12 13:27:59 +00:00
< pre > system_error( int ev, const error_category & ecat );< / pre >
2007-09-14 15:45:36 +00:00
< blockquote >
< p > < i > Effects:< / i > Constructs an object of class < code > system_error< / code > .< / p >
< p > < i > Postcondition:< / i > < code > code() == error_code( ev, ecat )< br >
& & std::strcmp( this-> runtime_error::what(), " " ) == 0< / code > < / p >
< / blockquote >
< pre > const error_code & code() const;< / pre >
< blockquote >
< p > < i > Returns:< / i > < code > ec< / code > or < code > error_code( ev, ecat )< / code > , from
the constructor, as appropriate.< / p >
< / blockquote >
< pre > const char * what() const;< / pre >
< blockquote >
< p > < i > Returns: < / i > A string incorporating < code >
this-> runtime_error::what()< / code > and < code >
code.message()< / code > .< / p >
< / blockquote >
< hr >
< p > Revised
2010-05-31 11:57:01 +00:00
<!-- webbot bot="Timestamp" S - Type="EDITED" S - Format="%B %d, %Y" startspan --> May 31, 2010<!-- webbot bot="Timestamp" endspan i - checksum="11033" --> < / font >
2007-09-14 15:45:36 +00:00
< / p >
2008-10-05 13:02:01 +00:00
< p > <EFBFBD> Copyright Beman Dawes, 2006, 2007, 2008< / p >
< p > Distributed under the Boost Software License, Version 1.0. See
< a href = "http://www.boost.org/LICENSE_1_0.txt" > www.boost.org/LICENSE_1_0.txt< / a > < / p >
2007-09-14 15:45:36 +00:00
< / body >
2010-05-30 15:38:32 +00:00
< / html >