BDE 4.39.x Production Release
Loading...
Searching...
No Matches
bslstl_error.h
Go to the documentation of this file.
1/// @file bslstl_error.h
2///
3/// The content of this file has been pre-processed for Doxygen.
4///
5
6
7// bslstl_error.h -*-C++-*-
8#ifndef INCLUDED_BSLSTL_ERROR
9#define INCLUDED_BSLSTL_ERROR
10
11#include <bsls_ident.h>
12BSLS_IDENT("$Id: $")
13
14// BDE_VERIFY pragma: -TP25 // CLASSES are not defined in C++11
15
16/// @defgroup bslstl_error bslstl_error
17/// @brief Provide standard compliant versions of <system_error> classes.
18/// @addtogroup bsl
19/// @{
20/// @addtogroup bslstl
21/// @{
22/// @addtogroup bslstl_error
23/// @{
24///
25/// <h1> Outline </h1>
26/// * <a href="#bslstl_error-purpose"> Purpose</a>
27/// * <a href="#bslstl_error-classes"> Classes </a>
28/// * <a href="#bslstl_error-canonical-header"> Canonical Header </a>
29/// * <a href="#bslstl_error-description"> Description </a>
30/// * <a href="#bslstl_error-usage"> Usage </a>
31/// * <a href="#bslstl_error-example-1-tbd"> Example 1: TBD </a>
32///
33/// # Purpose {#bslstl_error-purpose}
34/// Provide standard compliant versions of <system_error> classes.
35///
36/// # Classes {#bslstl_error-classes}
37///
38/// - bsl::error_category: a standard compliant version of @ref error_category
39/// - bsl::error_code: a standard complaint version of @ref error_code
40/// - bsl::error_condition: a standard complaint version of @ref error_condition
41///
42/// # Canonical Header {#bslstl_error-canonical-header}
43/// bsl_system_error.h
44///
45/// # Description {#bslstl_error-description}
46/// This component defines classes `bsl::error_category`,
47/// `bsl::error_code`, and `bsl::error_condition`, global functions
48/// `bsl::generic_category`, `bsl::system_category`, `bsl::make_error_code`, and
49/// `bsl::make_error_condition`, and a variety of operators that provide
50/// implementations of the C++11 @ref system_error facility. In C++11 mode, the
51/// vendor-supplied `<system_error>` implementation is used instead, and the
52/// corresponding names from `std` are imported into `bsl`.
53///
54/// ## Usage {#bslstl_error-usage}
55///
56///
57/// In this section we show intended use of this component.
58///
59/// ### Example 1: TBD {#bslstl_error-example-1-tbd}
60///
61///
62/// We are in the process of determining best practices for using error codes in
63/// our programming environment.
64/// @}
65/** @} */
66/** @} */
67
68/** @addtogroup bsl
69 * @{
70 */
71/** @addtogroup bslstl
72 * @{
73 */
74/** @addtogroup bslstl_error
75 * @{
76 */
77
78#include <bslscm_version.h>
79#include <bslstl_errc.h>
80#include <bslstl_hash.h>
83
84#include <bslh_hash.h>
85
86#include <bslmf_enableif.h>
88
89#include <bsls_keyword.h>
91#include <bsls_platform.h>
93
94#include <errno.h>
95#include <string.h>
96
97#include <cstring>
98#include <functional>
99#include <iosfwd>
100#include <stdexcept>
101#include <string>
102
103#ifndef BDE_DONT_ALLOW_TRANSITIVE_INCLUDES
104#include <bsls_nativestd.h>
105#endif // BDE_DONT_ALLOW_TRANSITIVE_INCLUDES
106
107#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
108
109#include <system_error>
110
111namespace bsl {
112
113using std::error_category;
114using std::error_code;
115using std::error_condition;
116using std::generic_category;
117using std::system_category;
118using std::make_error_code;
119using std::make_error_condition;
120
121} // close namespace bsl
122
123#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
124
125namespace bsl {
126
127template <>
128struct hash<error_code> : std::hash<error_code>
129{
130};
131
132template <>
133struct hash<error_condition> : std::hash<error_condition>
134{
135};
136
137} // close namespace bsl
138
139#endif
140
141#else
142
143namespace bsl {
144
145// FORWARD DECLARATIONS
146class error_code;
147class error_condition;
148
149 // ====================
150 // class error_category
151 // ====================
152
153/// This `class` acts as a base for types that represent the source and
154/// encoding of error categories.
155///
156/// See @ref bslstl_error
158
159 private:
160 // PRIVATE CREATORS
161 error_category(const error_category&); // = delete
162
163 // PRIVATE MANIPULATORS
164 error_category& operator=(const error_category&); // = delete
165
166 public:
167 // CREATORS
168
169 /// Create an object of this type.
171
172 /// Destroy this object.
174
175 // ACCESSORS
176
177 /// Return an @ref error_condition object initialized with the specified
178 /// `value` and this object as the error category.
179 virtual error_condition default_error_condition(int value) const
181
182 /// Return, for the error category defined by this object, whether the
183 /// specified `code` and `condition` are considered equivalent.
184 virtual bool equivalent(int code, const error_condition& condition) const
186 virtual bool equivalent(const error_code& code, int condition) const
188
189 /// Return a string describing the error condition denoted by the
190 /// specified `value`.
191 virtual std::string message(int value) const = 0;
192
193 /// Return the name of this error category.
194 virtual const char *name() const BSLS_KEYWORD_NOEXCEPT = 0;
195
196 /// Return whether this object is the same as the specified `other`.
197 bool operator==(const error_category& other) const BSLS_KEYWORD_NOEXCEPT;
198
199 /// Return whether this object is different than the specified `other`.
200 bool operator!=(const error_category& other) const BSLS_KEYWORD_NOEXCEPT;
201
202 /// Return whether this object precedes the specified `other` in a total
203 /// ordering of @ref error_category objects.
204 bool operator<(const error_category& other) const BSLS_KEYWORD_NOEXCEPT;
205};
206
207 // ================
208 // class error_code
209 // ================
210
211/// This `class` represents a system-specific error value.
212///
213/// See @ref bslstl_error
215
216 private:
217 // PRIVATE TYPES
218 typedef BloombergLP::bsls::UnspecifiedBool<error_code> UnspecifiedBool;
219 typedef UnspecifiedBool::BoolType BoolType;
220
221 public:
222 // CREATORS
223
224 /// Create an object of this type initialized with value 0 and system
225 /// category.
226 error_code();
227
228 /// Create an object of this type initialized with the specified `value`
229 /// and `category`.
230 error_code(int value, const error_category& category);
231
232 /// Construct an object of this type initialized with the specified
233 /// `value` and its category (found from an overloaded call to `make_error_code`).
234 ///
235 /// \note Note that this constructor exists only for
236 /// those types designated as error codes via the `is_error_code_enum`
237 /// trait template.
238 template <class ERROR_CODE_ENUM>
239 error_code(ERROR_CODE_ENUM value,
241 BoolType>::type = 0); // IMPLICIT
242
243 // MANIPULATORS
244
245 /// Set this object to hold the specified `value` and `category`.
246 void assign(int value, const error_category& category);
247
248 /// Set this object to hold the specified `value` and its category
249 /// (found from an overloaded call to @ref make_error_code ).
250 ///
251 /// \note Note that this operator exists only for those types designated as error codes
252 /// via the `is_error_code_enum` trait template.
253 /// \note Note that this object
254 /// is set to the generic rather than system category, because that is
255 /// what the standard specifies.
256 template <class ERROR_CODE_ENUM>
258 error_code&>::type
259 operator=(ERROR_CODE_ENUM value);
260
261 /// Set this object to hold the value 0 and the system category.
262 void clear();
263
264 // ACCESSORS
265
266 /// Return a `const` reference to the category held by this object.
267 const error_category& category() const;
268
269 /// Return an @ref error_condition object initialized with the value and
270 /// category of this object.
272
273 /// Return a string describing this object.
274 std::string message() const;
275
276 /// Return the value held by this object.
277 int value() const;
278
279 /// Return whether the value held by this object is non-zero.
280 operator BoolType() const;
281
282 private:
283 // DATA
284 int d_value; // error code value
285 const error_category *d_category_p; // error category
286};
287
288 // =====================
289 // class error_condition
290 // =====================
291
292/// This `class` represents a portable error value.
293///
294/// See @ref bslstl_error
296
297 private:
298 // PRIVATE TYPES
299 typedef BloombergLP::bsls::UnspecifiedBool<error_condition>
300 UnspecifiedBool;
301 typedef UnspecifiedBool::BoolType BoolType;
302
303 public:
304 // CREATORS
305
306 /// Create an object of this type initialized with value 0 and generic
307 /// category.
309
310 /// Create an object of this type initialized with the specified `value`
311 /// and `category`.
312 error_condition(int value, const error_category& category);
313
314 /// Construct an object of this type initialized with the specified
315 /// `value` and its category (found from an overloaded call to `make_error_condition`).
316 ///
317 /// \note Note that this constructor exists only for
318 /// those types designated as error conditions via the
319 /// `is_error_condition_enum` trait template.
320 template <class ERROR_CONDITION_ENUM>
321 error_condition(ERROR_CONDITION_ENUM value,
322 typename enable_if<
324 BoolType>::type = 0); // IMPLICIT
325
326 // MANIPULATORS
327
328 /// Set this object to hold the specified `value` and `category`.
329 void assign(int value, const error_category& category);
330
331 /// Set this object to hold the specified `value` and its category
332 /// (found from an overloaded call to @ref make_error_condition ).
333 ///
334 /// \note Note that this operator exists only for those types designated as error
335 /// conditions via the `is_error_condition_enum` trait template.
336 template <class ERROR_CONDITION_ENUM>
338 error_condition&>::type
339 operator=(ERROR_CONDITION_ENUM value);
340
341 /// Set this object to hold the value 0 and the generic category.
342 void clear();
343
344 // ACCESSORS
345
346 /// Return a `const` reference to the category held by this object.
347 const error_category& category() const;
348
349 /// Return a string describing this object.
350 std::string message() const;
351
352 /// Return the value held by this object.
353 int value() const;
354
355 /// Return whether the value held by this object is non-zero.
356 operator BoolType() const;
357
358 private:
359 // DATA
360 int d_value; // error code value
361 const error_category *d_category_p; // error category
362};
363
364// FREE FUNCTIONS
365
366/// Return a `const` reference to the unique generic category object.
368
369/// Return a `const` reference to the unique system category object.
371
372/// Return an @ref error_code object holding the specified `value` and generic category.
373///
374/// \note Note that the category is generic rather than system because
375/// that is what the standard specifies.
377
378/// Return an @ref error_condition object holding the specified `value` and
379/// generic category.
381
382/// Hash the specified `object` using the specified `hashAlgorithm`.
383template <class HASHALG>
384void hashAppend(HASHALG& hashAlgorithm, const error_code& object);
385
386/// Hash the specified `object` using the specified `hashAlgorithm`.
387template <class HASHALG>
388void hashAppend(HASHALG& hashAlgorithm, const error_condition& object);
389
390// FREE OPERATORS
391
392/// Return whether the specified `lhs` and `rhs` are equal or equivalent.
393bool operator==(const error_code& lhs, const error_code& rhs);
394bool operator==(const error_code& lhs, const error_condition& rhs);
395bool operator==(const error_condition& lhs, const error_code& rhs);
396bool operator==(const error_condition& lhs, const error_condition& rhs);
397
398/// Return whether the specified `lhs` and `rhs` are not equal or equivalent.
399bool operator!=(const error_code&, const error_code&);
400bool operator!=(const error_code&, const error_condition&);
401bool operator!=(const error_condition&, const error_code&);
402bool operator!=(const error_condition&, const error_condition&);
403
404/// Return whether the specified `lhs` is lexicographically less than the
405/// specified `rhs`, ordered by category then value.
406bool operator<(const error_code& lhs, const error_code& rhs);
407bool operator<(const error_condition& lhs, const error_condition& rhs);
408
409/// Write the specified `code` to `stream`.
410template <class CHAR_TYPE, class CHAR_TRAITS>
411inline
412std::basic_ostream<CHAR_TYPE, CHAR_TRAITS>& operator<<(
413 std::basic_ostream<CHAR_TYPE, CHAR_TRAITS>& stream,
414 const error_code& code);
415
416// ============================================================================
417// INLINE DEFINITIONS
418// ============================================================================
419
420 // --------------------
421 // class error_category
422 // --------------------
423
424//CREATORS
425inline
429
430// ACCESSORS
431inline
437
438inline
440 int code,
441 const error_condition& condition) const BSLS_KEYWORD_NOEXCEPT
442{
443 return default_error_condition(code) == condition;
444}
445
446inline
448 const error_code& code,
449 int condition) const BSLS_KEYWORD_NOEXCEPT
450{
451 return *this == code.category() && code.value() == condition;
452}
453
454inline
455std::string error_category::message(int value) const
456{
457 return strerror(value);
458}
459
460inline
462{
463 return "error_category";
464}
465
466inline
468 const error_category& other) const BSLS_KEYWORD_NOEXCEPT
469{
470 return this == &other;
471}
472
473inline
475 const error_category& other) const BSLS_KEYWORD_NOEXCEPT
476{
477 return !(*this == other);
478}
479
480inline
482 const error_category& other) const BSLS_KEYWORD_NOEXCEPT
483{
484 return std::less<const error_category *>()(this, &other);
485}
486
487 // ----------------
488 // class error_code
489 // ----------------
490
491// CREATORS
492inline
494: d_value(0)
495, d_category_p(&system_category())
496{
497}
498
499inline
500error_code::error_code(int value, const error_category& category)
501: d_value(value)
502, d_category_p(&category)
503{
504}
505
506template <class ERROR_CODE_ENUM>
507inline
508error_code::error_code(ERROR_CODE_ENUM value,
509 typename enable_if<
511 BoolType>::type) // IMPLICIT
512: d_value(make_error_code(value).value())
513, d_category_p(&make_error_code(value).category())
514{
515}
516
517
518// MANIPULATORS
519inline
520void error_code::assign(int value, const error_category& category)
521{
522 d_value = value;
523 d_category_p = &category;
524}
525
526inline
528{
529 d_value = 0;
530 d_category_p = &system_category();
531}
532
533template <class ERROR_CODE_ENUM>
534inline
536 error_code&>::type
537error_code::operator=(ERROR_CODE_ENUM value)
538{
539 d_value = make_error_code(value).value();
540 d_category_p = &make_error_code(value).category();
541 return *this;
542}
543
544// ACCESSORS
545inline
547{
548 return *d_category_p;
549}
550
551inline
556
557inline
558std::string error_code::message() const
559{
560 return category().message(value());
561}
562
563inline
565{
566 return d_value;
567}
568
569inline
570error_code::operator BoolType() const
571{
572 return UnspecifiedBool::makeValue(value());
573}
574
575// FREE FUNCTIONS
576template <class HASHALG>
577void hashAppend(HASHALG& hashAlgorithm, const error_code& object)
578{
579 using ::BloombergLP::bslh::hashAppend;
580 hashAppend(hashAlgorithm, static_cast<const void *>(&object.category()));
581 hashAppend(hashAlgorithm, object.value());
582}
583
584inline
586{
587 return error_code(static_cast<int>(value), generic_category());
588}
589
590// FREE OPERATORS
591template <class CHAR_TYPE, class CHAR_TRAITS>
592inline
593std::basic_ostream<CHAR_TYPE, CHAR_TRAITS>& operator<<(
594 std::basic_ostream<CHAR_TYPE, CHAR_TRAITS>& stream,
595 const error_code& code)
596{
597 return stream << code.category().name() << ':' << code.value();
598}
599
600 // ---------------------
601 // class error_condition
602 // ---------------------
603
604// CREATORS
605inline
607: d_value(0)
608, d_category_p(&generic_category())
609{
610}
611
612inline
614: d_value(value)
615, d_category_p(&category)
616{
617}
618
619template <class ERROR_CONDITION_ENUM>
620inline
622 ERROR_CONDITION_ENUM value,
624 BoolType>::type) // IMPLICIT
625: d_value(make_error_condition(value).value())
626, d_category_p(&make_error_condition(value).category())
627{
628}
629
630// MANIPULATORS
631inline
632void error_condition::assign(int value, const error_category& category)
633{
634 d_value = value;
635 d_category_p = &category;
636}
637
638inline
640{
641 d_value = 0;
642 d_category_p = &generic_category();
643}
644
645template <class ERROR_CONDITION_ENUM>
646inline
648 error_condition&>::type
649error_condition::operator=(ERROR_CONDITION_ENUM value)
650{
651 d_value = make_error_condition(value).value();
652 d_category_p = &make_error_condition(value).category();
653 return *this;
654}
655
656// ACCESSORS
657inline
659{
660 return *d_category_p;
661}
662
663inline
664std::string error_condition::message() const
665{
666 return category().message(value());
667}
668
669inline
671{
672 return d_value;
673}
674
675inline
676error_condition::operator BoolType() const
677{
678 return UnspecifiedBool::makeValue(value());
679}
680
681// FREE FUNCTIONS
682template <class HASHALG>
683void hashAppend(HASHALG& hashAlgorithm, const error_condition& object)
684{
685 using ::BloombergLP::bslh::hashAppend;
686 hashAppend(hashAlgorithm, static_cast<const void *>(&object.category()));
687 hashAppend(hashAlgorithm, object.value());
688}
689
690inline
692{
693 return error_condition(static_cast<int>(value), generic_category());
694}
695
696// FREE OPERATORS
697inline
698bool operator==(const error_code& lhs, const error_code& rhs)
699{
700 return lhs.category() == rhs.category() && lhs.value() == rhs.value();
701}
702
703inline
704bool operator==(const error_code& lhs, const error_condition& rhs)
705{
706 return lhs.category().equivalent(lhs.value(), rhs) ||
707 rhs.category().equivalent(lhs, rhs.value());
708}
709
710inline
711bool operator==(const error_condition& lhs, const error_code& rhs)
712{
713 return rhs.category().equivalent(rhs.value(), lhs) ||
714 lhs.category().equivalent(rhs, lhs.value());
715}
716
717inline
718bool operator==(const error_condition& lhs, const error_condition& rhs)
719{
720 return lhs.category() == rhs.category() && lhs.value() == rhs.value();
721}
722
723inline
724bool operator!=(const error_code& lhs, const error_code& rhs)
725{
726 return !(lhs == rhs);
727}
728
729inline
730bool operator!=(const error_code& lhs, const error_condition& rhs)
731{
732 return !(lhs == rhs);
733}
734
735inline
736bool operator!=(const error_condition& lhs, const error_code& rhs)
737{
738 return !(lhs == rhs);
739}
740
741inline
742bool operator!=(const error_condition& lhs, const error_condition& rhs)
743{
744 return !(lhs == rhs);
745}
746
747inline
748bool operator<(const error_code& lhs, const error_code& rhs)
749{
750 return lhs.category() < rhs.category() ||
751 (lhs.category() == rhs.category() && lhs.value() < rhs.value());
752}
753
754inline
755bool operator<(const error_condition& lhs, const error_condition& rhs)
756{
757 return lhs.category() < rhs.category() ||
758 (lhs.category() == rhs.category() && lhs.value() < rhs.value());
759}
760
761template <>
762struct hash<bsl::error_code> : BloombergLP::bslh::Hash<>
763{
764};
765
766template <>
767struct hash<bsl::error_condition> : BloombergLP::bslh::Hash<>
768{
769};
770
771} // close namespace bsl
772
773namespace std {
774
775#if !defined(BSLS_PLATFORM_OS_DARWIN) || defined (BSLS_PLATFORM_CMP_GNU)
776 // On C++03 on Darwin, the template struct 'hash' is forward declared with
777 // different attributes in <typetraits> that conflict with this forward
778 // declaration.
779
780 template <class TYPE>
781 struct hash;
782#endif
783
784template <>
785struct hash<bsl::error_code> : BloombergLP::bslh::Hash<>
786{
787};
788
789template <>
790struct hash<bsl::error_condition> : BloombergLP::bslh::Hash<>
791{
792};
793} // close namespace std
794
795#endif
796#endif
797
798// ----------------------------------------------------------------------------
799// Copyright 2019 Bloomberg Finance L.P.
800//
801// Licensed under the Apache License, Version 2.0 (the "License");
802// you may not use this file except in compliance with the License.
803// You may obtain a copy of the License at
804//
805// http://www.apache.org/licenses/LICENSE-2.0
806//
807// Unless required by applicable law or agreed to in writing, software
808// distributed under the License is distributed on an "AS IS" BASIS,
809// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
810// See the License for the specific language governing permissions and
811// limitations under the License.
812// ----------------------------- END-OF-FILE ----------------------------------
813
814/** @} */
815/** @} */
816/** @} */
Definition bslstl_error.h:157
bool operator==(const error_category &other) const BSLS_KEYWORD_NOEXCEPT
Return whether this object is the same as the specified other.
Definition bslstl_error.h:467
bool operator<(const error_category &other) const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_error.h:481
virtual ~error_category()
Destroy this object.
virtual const char * name() const BSLS_KEYWORD_NOEXCEPT=0
Return the name of this error category.
Definition bslstl_error.h:461
error_category()
Create an object of this type.
Definition bslstl_error.h:426
bool operator!=(const error_category &other) const BSLS_KEYWORD_NOEXCEPT
Return whether this object is different than the specified other.
Definition bslstl_error.h:474
virtual bool equivalent(int code, const error_condition &condition) const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_error.h:439
virtual error_condition default_error_condition(int value) const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_error.h:432
virtual std::string message(int value) const =0
Definition bslstl_error.h:455
Definition bslstl_error.h:214
error_condition default_error_condition() const
Definition bslstl_error.h:552
error_code()
Definition bslstl_error.h:493
std::string message() const
Return a string describing this object.
Definition bslstl_error.h:558
const error_category & category() const
Return a const reference to the category held by this object.
Definition bslstl_error.h:546
void clear()
Set this object to hold the value 0 and the system category.
Definition bslstl_error.h:527
int value() const
Return the value held by this object.
Definition bslstl_error.h:564
void assign(int value, const error_category &category)
Set this object to hold the specified value and category.
Definition bslstl_error.h:520
enable_if< is_error_code_enum< ERROR_CODE_ENUM >::value, error_code & >::type operator=(ERROR_CODE_ENUM value)
Definition bslstl_error.h:537
Definition bslstl_error.h:295
int value() const
Return the value held by this object.
Definition bslstl_error.h:670
void clear()
Set this object to hold the value 0 and the generic category.
Definition bslstl_error.h:639
const error_category & category() const
Return a const reference to the category held by this object.
Definition bslstl_error.h:658
enable_if< is_error_condition_enum< ERROR_CONDITION_ENUM >::value, error_condition & >::type operator=(ERROR_CONDITION_ENUM value)
Definition bslstl_error.h:649
void assign(int value, const error_category &category)
Set this object to hold the specified value and category.
Definition bslstl_error.h:632
std::string message() const
Return a string describing this object.
Definition bslstl_error.h:664
error_condition()
Definition bslstl_error.h:606
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#define BSLS_KEYWORD_NOEXCEPT
Definition bsls_keyword.h:674
Definition bdlat_valuetypefunctions.h:939
error_code make_error_code(errc::Enum value)
Definition bslstl_error.h:585
const error_category & system_category()
Return a const reference to the unique system category object.
void hashAppend(HASH_ALGORITHM &hashAlgorithm, const array< TYPE, SIZE > &input)
Pass the specified input to the specified hashAlgorithm
Definition bslstl_array.h:959
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
std::basic_ostream< CHAR_TYPE, TRAITS > & operator<<(std::basic_ostream< CHAR_TYPE, TRAITS > &os, const bitset< N > &x)
Definition bslstl_bitset.h:1417
ALLOCATOR & lhs
Definition bslstl_string.h:3917
const error_category & generic_category()
Return a const reference to the unique generic category object.
error_condition make_error_condition(errc::Enum value)
Definition bslstl_error.h:691
Definition bdldfp_decimal.h:5549
Definition bslmf_enableif.h:530
Enum
Definition bslstl_errc.h:144
Definition bslstl_hash.h:495
Definition bslstl_iserrorcodeenum.h:156
Definition bslstl_iserrorconditionenum.h:156
Definition bslstl_error.h:781