Loading [MathJax]/extensions/TeX/newcommand.js
 deal.II version GIT relicensing-3057-gb5b616642a 2025-04-10 20:30:00+00:00
\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}} \newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=} \newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]} \newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
exceptions.h
Go to the documentation of this file.
1// ------------------------------------------------------------------------
2//
3// SPDX-License-Identifier: LGPL-2.1-or-later
4// Copyright (C) 1998 - 2024 by the deal.II authors
5//
6// This file is part of the deal.II library.
7//
8// Part of the source code is dual licensed under Apache-2.0 WITH
9// LLVM-exception OR LGPL-2.1-or-later. Detailed license information
10// governing the source code and code contributions can be found in
11// LICENSE.md and CONTRIBUTING.md at the top level directory of deal.II.
12//
13// ------------------------------------------------------------------------
14
15#ifndef dealii_exceptions_h
16#define dealii_exceptions_h
17
18#include <deal.II/base/config.h>
19
20// The exception machinery (including the macros defined in
21// exception_macros.h) references Kokkos functions. The places that
22// use exceptions must know about these functions, and to avoid them
23// all having to include Kokkos headers, we have to do it here:
25#include <Kokkos_Macros.hpp>
26#if DEAL_II_KOKKOS_VERSION_GTE(4, 2, 0)
27# include <Kokkos_Abort.hpp>
28#else
29# include <Kokkos_Core.hpp>
30#endif
32
33
35
36#include <complex>
37#include <exception>
38#include <ostream>
39#include <string>
40#include <type_traits>
41
43
44
58class ExceptionBase : public std::exception
59{
60public:
65
70
74 virtual ~ExceptionBase() noexcept override = default;
75
81 operator=(const ExceptionBase &) = delete;
82
88 void
89 set_fields(const char *file,
90 const int line,
91 const char *function,
92 const char *cond,
93 const char *exc_name);
94
95
99 virtual const char *
100 what() const noexcept override;
101
105 const char *
106 get_exc_name() const;
107
111 void
112 print_exc_data(std::ostream &out) const;
113
118 virtual void
119 print_info(std::ostream &out) const;
120
125 void
126 print_stack_trace(std::ostream &out) const;
127
128protected:
132 const char *file;
133
137 unsigned int line;
138
142 const char *function;
143
147 const char *cond;
148
152 const char *exc;
153
159
160#ifdef DEAL_II_HAVE_GLIBC_STACKTRACE
164 void *raw_stacktrace[25];
165#endif
166
167private:
171 void
172 generate_message() const;
173
178 mutable std::string what_str;
179};
180
181
194{
204 "A piece of code is attempting a division by zero. This is "
205 "likely going to lead to results that make no sense.");
206
219 std::complex<double>,
220 << "In a significant number of places, deal.II checks that some intermediate "
221 << "value is a finite number (as opposed to plus or minus infinity, or "
222 << "NaN/Not a Number). In the current function, we encountered a number "
223 << "that is not finite (its value is " << arg1 << " and therefore "
224 << "violates the current assertion).\n\n"
225 << "This may be due to the fact that some operation in this function "
226 << "created such a value, or because one of the arguments you passed "
227 << "to the function already had this value from some previous "
228 << "operation. In the latter case, this function only triggered the "
229 << "error but may not actually be responsible for the computation of "
230 << "the number that is not finite.\n\n"
231 << "There are two common cases where this situation happens. First, your "
232 << "code (or something in deal.II) divides by zero in a place where this "
233 << "should not happen. Or, you are trying to solve a linear system "
234 << "with an unsuitable solver (such as an indefinite or non-symmetric "
235 << "linear system using a Conjugate Gradient solver); such attempts "
236 << "oftentimes yield an operation somewhere that tries to divide "
237 << "by zero or take the square root of a negative value.\n\n"
238 << "In any case, when trying to find the source of the error, "
239 << "recall that the location where you are getting this error is "
240 << "simply the first place in the program where there is a check "
241 << "that a number (e.g., an element of a solution vector) is in fact "
242 << "finite, but that the actual error that computed the number "
243 << "may have happened far earlier. To find this location, you "
244 << "may want to add checks for finiteness in places of your "
245 << "program visited before the place where this error is produced. "
246 << "One way to check for finiteness is to use the 'AssertIsFinite' "
247 << "macro.");
248
253 std::size_t,
254 "Your program tried to allocate some memory but this "
255 "allocation failed. Typically, this either means that "
256 "you simply do not have enough memory in your system, "
257 "or that you are (erroneously) trying to allocate "
258 "a chunk of memory that is simply beyond all reasonable "
259 "size, for example because the size of the object has "
260 "been computed incorrectly."
261 "\n\n"
262 "In the current case, the request was for "
263 << arg1 << " bytes.");
264
270 int,
271 << "Destroying memory handler while " << arg1
272 << " objects are still allocated.");
273
278 "An input/output error has occurred. There are a number of "
279 "reasons why this may be happening, both for reading and "
280 "writing operations."
281 "\n\n"
282 "If this happens during an operation that tries to read "
283 "data: First, you may be "
284 "trying to read from a file that doesn't exist or that is "
285 "not readable given its file permissions. Second, deal.II "
286 "uses this error at times if it tries to "
287 "read information from a file but where the information "
288 "in the file does not correspond to the expected format. "
289 "An example would be a truncated file, or a mesh file "
290 "that contains not only sections that describe the "
291 "vertices and cells, but also sections for additional "
292 "data that deal.II does not understand."
293 "\n\n"
294 "If this happens during an operation that tries to write "
295 "data: you may be trying to write to a file to which file "
296 "or directory permissions do not allow you to write. A "
297 "typical example is where you specify an output file in "
298 "a directory that does not exist.");
299
307 std::string,
308 << "Could not open file " << arg1
309 << "."
310 "\n\n"
311 "If this happens during an operation that tries to read "
312 "data: you may be "
313 "trying to read from a file that doesn't exist or that is "
314 "not readable given its file permissions."
315 "\n\n"
316 "If this happens during an operation that tries to write "
317 "data: you may be trying to write to a file to which file "
318 "or directory permissions do not allow you to write. A "
319 "typical example is where you specify an output file in "
320 "a directory that does not exist.");
321
331 "You are trying to use functionality in deal.II that is "
332 "currently not implemented. In many cases, this indicates "
333 "that there simply didn't appear much of a need for it, or "
334 "that the author of the original code did not have the "
335 "time to implement a particular case. If you hit this "
336 "exception, it is therefore worth the time to look into "
337 "the code to find out whether you may be able to "
338 "implement the missing functionality. If you do, please "
339 "consider providing a patch to the deal.II development "
340 "sources (see the deal.II website on how to contribute).");
341
363 "This exception -- which is used in many places in the "
364 "library -- usually indicates that some condition which "
365 "the author of the code thought must be satisfied at a "
366 "certain point in an algorithm, is not fulfilled. An "
367 "example would be that the first part of an algorithm "
368 "sorts elements of an array in ascending order, and "
369 "a second part of the algorithm later encounters an "
370 "element that is not larger than the previous one."
371 "\n\n"
372 "There is usually not very much you can do if you "
373 "encounter such an exception since it indicates an error "
374 "in deal.II, not in your own program. Try to come up with "
375 "the smallest possible program that still demonstrates "
376 "the error and contact the deal.II mailing lists with it "
377 "to obtain help.");
378
387 "You (or a place in the library) are trying to call a "
388 "function that is declared as a virtual function in a "
389 "base class but that has not been overridden in your "
390 "derived class."
391 "\n\n"
392 "This exception happens in cases where the base class "
393 "cannot provide a useful default implementation for "
394 "the virtual function, but where we also do not want "
395 "to mark the function as abstract (i.e., with '=0' at the end) "
396 "because the function is not essential to the class in many "
397 "contexts. In cases like this, the base class provides "
398 "a dummy implementation that makes the compiler happy, but "
399 "that then throws the current exception."
400 "\n\n"
401 "A concrete example would be the 'Function' class. It declares "
402 "the existence of 'value()' and 'gradient()' member functions, "
403 "and both are marked as 'virtual'. Derived classes have to "
404 "override these functions for the values and gradients of a "
405 "particular function. On the other hand, not every function "
406 "has a gradient, and even for those that do, not every program "
407 "actually needs to evaluate it. Consequently, there is no "
408 "*requirement* that a derived class actually override the "
409 "'gradient()' function (as there would be had it been marked "
410 "as abstract). But, since the base class cannot know how to "
411 "compute the gradient, if a derived class does not override "
412 "the 'gradient()' function and it is called anyway, then the "
413 "default implementation in the base class will simply throw "
414 "an exception."
415 "\n\n"
416 "The exception you see is what happens in cases such as the "
417 "one just illustrated. To fix the problem, you need to "
418 "investigate whether the function being called should indeed have "
419 "been called; if the answer is 'yes', then you need to "
420 "implement the missing override in your class.");
421
426 std::string,
427 << "Please provide an implementation for the function \""
428 << arg1 << "\"");
429
435 std::string,
436 int,
437 << "The function \"" << arg1 << "\" returned the nonzero value " << arg2
438 << ", but the calling site expected the return value to be zero. "
439 "This error often happens when the function in question is a 'callback', "
440 "that is a user-provided function called from somewhere within deal.II "
441 "or within an external library such as PETSc, Trilinos, SUNDIALS, etc., "
442 "that expect these callbacks to indicate errors via nonzero return "
443 "codes.");
444
449
454
462 int,
463 << "You are trying to execute functionality that is "
464 << "impossible in " << arg1
465 << "d or simply does not make any sense.");
466
475 int,
476 int,
477 << "You are trying to execute functionality that is "
478 << "impossible in dimensions <" << arg1 << ',' << arg2
479 << "> or simply does not make any sense.");
480
481
486 "In a check in the code, deal.II encountered a zero in "
487 "a place where this does not make sense. See the condition "
488 "that was being checked and that is printed further up "
489 "in the error message to get more information on what "
490 "the erroneous zero corresponds to.");
491
497 "The object you are trying to access is empty but it makes "
498 "no sense to attempt the operation you are trying on an "
499 "empty object.");
500
509 std::size_t,
510 std::size_t,
511 << "Two sizes or dimensions were supposed to be equal, "
512 << "but aren't. They are " << arg1 << " and " << arg2 << '.');
513
520 long long,
521 long long,
522 << "Two integers should be equal to each other after a type conversion but "
523 << "aren't. A typical cause of this problem is that the integral types "
524 << "used by deal.II and an external library are different (e.g., one uses "
525 << "32-bit integers and the other uses 64-bit integers). The integers are "
526 << arg1 << " and " << arg2 << '.');
527
533 std::size_t,
534 std::size_t,
535 std::size_t,
536 << "The size or dimension of one object, " << arg1
537 << " was supposed to be "
538 << "equal to one of two values, but isn't. The two possible "
539 << "values are " << arg2 << " and " << arg3 << '.');
540
555 std::size_t,
556 std::size_t,
557 std::size_t,
558 << "Index " << arg1 << " is not in the half-open range [" << arg2 << ','
559 << arg3 << ")."
560 << (arg2 == arg3 ?
561 " In the current case, this half-open range is in fact empty, "
562 "suggesting that you are accessing an element of an empty "
563 "collection such as a vector that has not been set to the "
564 "correct size." :
565 ""));
566
582 template <typename T>
585 T,
586 T,
587 T,
588 << "Index " << arg1 << " is not in the half-open range [" << arg2 << ','
589 << arg3 << ")."
590 << (arg2 == arg3 ?
591 " In the current case, this half-open range is in fact empty, "
592 "suggesting that you are accessing an element of an empty "
593 "collection such as a vector that has not been set to the "
594 "correct size." :
595 ""));
596
601 int,
602 int,
603 << "Number " << arg1 << " must be larger than or equal "
604 << arg2 << '.');
605
609 template <typename T>
611 T,
612 T,
613 << "Number " << arg1 << " must be larger than or equal "
614 << arg2 << '.');
615
621 int,
622 int,
623 << "Division " << arg1 << " by " << arg2
624 << " has remainder different from zero.");
625
635 "You are trying to use an iterator, but the iterator is "
636 "in an invalid state. This may indicate that the iterator "
637 "object has not been initialized, or that it has been "
638 "moved beyond the end of the range of valid elements.");
639
645 "You are trying to use an iterator, but the iterator is "
646 "pointing past the end of the range of valid elements. "
647 "It is not valid to dereference the iterator in this "
648 "case.");
649
663 DeclException1(ExcMessage, std::string, << arg1);
664
669 "You are trying an operation on a vector that is only "
670 "allowed if the vector has no ghost elements, but the "
671 "vector you are operating on does have ghost elements."
672 "\n\n"
673 "Specifically, there are two kinds of operations that "
674 "are typically not allowed on vectors with ghost elements. "
675 "First, vectors with ghost elements are read-only "
676 "and cannot appear in operations that write into these "
677 "vectors. Second, reduction operations (such as computing "
678 "the norm of a vector, or taking dot products between "
679 "vectors) are not allowed to ensure that each vector "
680 "element is counted only once (as opposed to once for "
681 "the owner of the element plus once for each process "
682 "on which the element is stored as a ghost copy)."
683 "\n\n"
684 "See the glossary entry on 'Ghosted vectors' for more "
685 "information.");
686
692 int,
693 << "Something went wrong when making cell " << arg1
694 << ". Read the docs and the source code "
695 << "for more information.");
696
705 "You are trying an operation of the form 'vector = C', "
706 "'matrix = C', or 'tensor = C' with a nonzero scalar value "
707 "'C'. However, such assignments are only allowed if the "
708 "C is zero, since the semantics for assigning any other "
709 "value are not clear. For example: one could interpret "
710 "assigning a matrix a value of 1 to mean the matrix has a "
711 "norm of 1, the matrix is the identity matrix, or the "
712 "matrix contains only 1s. Similar problems exist with "
713 "vectors and tensors. Hence, to avoid this ambiguity, such "
714 "assignments are not permitted.");
715
721 "You are attempting to use functionality that is only available "
722 "if deal.II was configured to use LAPACK, but when you configured "
723 "the library, cmake did not find a valid LAPACK library."
724 "\n\n"
725 "You will have to ensure that your system has a usable LAPACK "
726 "installation and re-install deal.II, making sure that cmake "
727 "finds the LAPACK installation. You can check this by "
728 "looking at the summary printed at the end of the cmake "
729 "output.");
730
736 "You are attempting to use functionality that requires that deal.II is configured "
737 "with HDF5 support. However, when you called 'cmake', HDF5 support "
738 "was not detected."
739 "\n\n"
740 "You will have to ensure that your system has a usable HDF5 "
741 "installation and re-install deal.II, making sure that cmake "
742 "finds the HDF5 installation. You can check this by "
743 "looking at the summary printed at the end of the cmake "
744 "output.");
745
751 "You are attempting to use functionality that is only available "
752 "if deal.II was configured to use MPI."
753 "\n\n"
754 "You will have to ensure that your system has a usable MPI "
755 "installation and re-install deal.II, making sure that cmake "
756 "finds the MPI installation. You can check this by "
757 "looking at the summary printed at the end of the cmake "
758 "output.");
759
765 "You are attempting to use functionality that is only available "
766 "if deal.II was configured to use the function parser which "
767 "relies on the muparser library, but cmake did not "
768 "find a valid muparser library on your system and also did "
769 "not choose the one that comes bundled with deal.II."
770 "\n\n"
771 "You will have to ensure that your system has a usable muparser "
772 "installation and re-install deal.II, making sure that cmake "
773 "finds the muparser installation. You can check this by "
774 "looking at the summary printed at the end of the cmake "
775 "output.");
776
777
783 "You are attempting to use functionality that is only available "
784 "if deal.II was configured to use Assimp, but cmake did not "
785 "find a valid Assimp library."
786 "\n\n"
787 "You will have to ensure that your system has a usable Assimp "
788 "installation and re-install deal.II, making sure that cmake "
789 "finds the Assimp installation. You can check this by "
790 "looking at the summary printed at the end of the cmake "
791 "output.");
792
798 "You are attempting to use functionality that is only available if deal.II "
799 "was configured to use Trilinos' SEACAS library (which provides ExodusII), "
800 "but cmake did not find a valid SEACAS library."
801 "\n\n"
802 "You will have to ensure that your system has a usable ExodusII "
803 "installation and re-install deal.II, making sure that cmake "
804 "finds the ExodusII installation. You can check this by "
805 "looking at the summary printed at the end of the cmake "
806 "output.");
807
813 "You are attempting to use functionality that is only available "
814 "if deal.II was configured to use CGAL, but cmake did not "
815 "find a valid CGAL library."
816 "\n\n"
817 "You will have to ensure that your system has a usable CGAL "
818 "installation and re-install deal.II, making sure that cmake "
819 "finds the CGAL installation. You can check this by "
820 "looking at the summary printed at the end of the cmake "
821 "output.");
822
823#ifdef DEAL_II_WITH_MPI
845 class ExcMPI : public ::ExceptionBase
846 {
847 public:
848 ExcMPI(const int error_code);
849
850 virtual void
851 print_info(std::ostream &out) const override;
852
853 const int error_code;
854 };
855#endif // DEAL_II_WITH_MPI
856
857
858
859#ifdef DEAL_II_TRILINOS_WITH_SEACAS
869 {
870 public:
876 ExcExodusII(const int error_code);
877
881 virtual void
882 print_info(std::ostream &out) const override;
883
887 const int error_code;
888 };
889#endif // DEAL_II_TRILINOS_WITH_SEACAS
890
897 "A user call-back function encountered a recoverable error, "
898 "but the underlying library that called the call-back did not "
899 "manage to recover from the error and aborted its operation."
900 "\n\n"
901 "See the glossary entry on user call-back functions for more "
902 "information.");
903
906} /*namespace StandardExceptions*/
907
908
909
917{
918 namespace internals
919 {
927 extern bool allow_abort_on_exception;
928 } // namespace internals
929
948 void
949 set_additional_assert_output(const char *const p);
950
961 void
963
978 void
980
989 void
991
999 namespace internals
1000 {
1005 [[noreturn]] void
1006 abort(const ExceptionBase &exc) noexcept;
1007
1024
1042 template <typename ExceptionType>
1043 [[noreturn]] void
1045 const char *file,
1046 int line,
1047 const char *function,
1048 const char *cond,
1049 const char *exc_name,
1050 ExceptionType e)
1051 {
1052 static_assert(std::is_base_of_v<ExceptionBase, ExceptionType>,
1053 "The provided exception must inherit from ExceptionBase.");
1054 // Fill the fields of the exception object
1055 e.set_fields(file, line, function, cond, exc_name);
1056
1057 switch (handling)
1058 {
1060 {
1061 if (::deal_II_exceptions::internals::
1064 else
1065 {
1066 // We are not allowed to abort, so just throw the error:
1067 throw e;
1068 }
1069 }
1071 throw e;
1072 // this function should never return (and AssertNothrow can);
1073 // something must have gone wrong in the error handling code for us
1074 // to get this far, so throw an exception.
1075 default:
1076 throw ::StandardExceptions::ExcInternalError();
1077 }
1078 }
1079
1083 void
1084 do_issue_error_nothrow(const ExceptionBase &e) noexcept;
1085
1094 template <typename ExceptionType>
1095 void
1096 issue_error_nothrow(const char *file,
1097 int line,
1098 const char *function,
1099 const char *cond,
1100 const char *exc_name,
1101 ExceptionType e) noexcept
1102 {
1103 static_assert(std::is_base_of_v<ExceptionBase, ExceptionType>,
1104 "The provided exception must inherit from ExceptionBase.");
1105 // Fill the fields of the exception object
1106 e.set_fields(file, line, function, cond, exc_name);
1107 // avoid moving a bunch of code into the header by dispatching to
1108 // another function:
1110 }
1111 } /*namespace internals*/
1112
1113} /*namespace deal_II_exceptions*/
1114
1115
1116
1117namespace deal_II_exceptions
1118{
1119 namespace internals
1120 {
1126 template <typename T, typename U>
1127 inline DEAL_II_HOST_DEVICE constexpr bool
1128 compare_for_equality(const T &t, const U &u)
1129 {
1130 using common_type = std::common_type_t<T, U>;
1131 return static_cast<common_type>(t) == static_cast<common_type>(u);
1132 }
1133
1134
1140 template <typename T, typename U>
1141 inline DEAL_II_HOST_DEVICE constexpr bool
1142 compare_less_than(const T &t, const U &u)
1143 {
1144 using common_type = std::common_type_t<T, U>;
1145 return (static_cast<common_type>(t) < static_cast<common_type>(u));
1146 }
1147 } // namespace internals
1148} // namespace deal_II_exceptions
1149
1150
1151
1152namespace internal
1153{
1154 // Workaround to allow for commas in template parameter lists
1155 // in preprocessor macros as found in
1156 // https://stackoverflow.com/questions/13842468/comma-in-c-c-macro
1157 template <typename F>
1159
1160 template <typename T, typename U>
1161 struct argument_type<T(U)>
1162 {
1163 using type = U;
1164 };
1165
1166 template <typename F>
1168} // namespace internal
1169
1170
1171using namespace StandardExceptions;
1172
1174
1175#endif
void generate_message() const
void print_stack_trace(std::ostream &out) const
const char * file
Definition exceptions.h:132
std::string what_str
Definition exceptions.h:178
const char * get_exc_name() const
virtual ~ExceptionBase() noexcept override=default
int n_stacktrace_frames
Definition exceptions.h:158
void set_fields(const char *file, const int line, const char *function, const char *cond, const char *exc_name)
virtual void print_info(std::ostream &out) const
virtual const char * what() const noexcept override
const char * exc
Definition exceptions.h:152
const char * function
Definition exceptions.h:142
void print_exc_data(std::ostream &out) const
unsigned int line
Definition exceptions.h:137
void * raw_stacktrace[25]
Definition exceptions.h:164
const char * cond
Definition exceptions.h:147
virtual void print_info(std::ostream &out) const override
virtual void print_info(std::ostream &out) const override
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:35
#define DEAL_II_DISABLE_EXTRA_DIAGNOSTICS
Definition config.h:595
#define DEAL_II_HOST_DEVICE
Definition config.h:166
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:36
#define DEAL_II_ENABLE_EXTRA_DIAGNOSTICS
Definition config.h:638
static ::ExceptionBase & ExcIndexRangeType(T arg1, T arg2, T arg3)
static ::ExceptionBase & ExcImpossibleInDimSpacedim(int arg1, int arg2)
#define DeclException0(Exception0)
static ::ExceptionBase & ExcInvalidIterator()
static ::ExceptionBase & ExcOutOfMemory(std::size_t arg1)
static ::ExceptionBase & ExcIO()
static ::ExceptionBase & ExcGhostsPresent()
static ::ExceptionBase & ExcFileNotOpen(std::string arg1)
static ::ExceptionBase & ExcZero()
static ::ExceptionBase & ExcNeedsAssimp()
static ::ExceptionBase & ExcNeedsFunctionparser()
static ::ExceptionBase & ExcNotMultiple(int arg1, int arg2)
static ::ExceptionBase & ExcNotImplemented()
static ::ExceptionBase & ExcNeedsMPI()
static ::ExceptionBase & ExcFunctionNotProvided(std::string arg1)
static ::ExceptionBase & ExcEmptyObject()
static ::ExceptionBase & ExcScalarAssignmentOnlyForZeroValue()
static ::ExceptionBase & ExcMemoryLeak(int arg1)
static ::ExceptionBase & ExcLowerRangeType(T arg1, T arg2)
static ::ExceptionBase & ExcImpossibleInDim(int arg1)
static ::ExceptionBase & ExcIteratorPastEnd()
static ::ExceptionBase & ExcNeedsExodusII()
static ::ExceptionBase & ExcDimensionMismatch2(std::size_t arg1, std::size_t arg2, std::size_t arg3)
#define DeclException2(Exception2, type1, type2, outsequence)
static ::ExceptionBase & ExcLowerRange(int arg1, int arg2)
static ::ExceptionBase & ExcGridHasInvalidCell(int arg1)
static ::ExceptionBase & ExcNumberNotFinite(std::complex< double > arg1)
static ::ExceptionBase & ExcPureFunctionCalled()
#define DeclExceptionMsg(Exception, defaulttext)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcDivideByZero()
static ::ExceptionBase & ExcNeedsHDF5()
static ::ExceptionBase & ExcNeedsLAPACK()
#define DeclException3(Exception3, type1, type2, type3, outsequence)
static ::ExceptionBase & ExcNeedsCGAL()
static ::ExceptionBase & ExcIndexRange(std::size_t arg1, std::size_t arg2, std::size_t arg3)
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
static ::ExceptionBase & ExcNotInitialized()
static ::ExceptionBase & ExcInvalidState()
#define DeclException1(Exception1, type1, outsequence)
static ::ExceptionBase & RecoverableUserCallbackError()
static ::ExceptionBase & ExcInvalidIntegerConversion(long long arg1, long long arg2)
static ::ExceptionBase & ExcMessage(std::string arg1)
static ::ExceptionBase & ExcFunctionNonzeroReturn(std::string arg1, int arg2)
constexpr bool compare_less_than(const T &t, const U &u)
constexpr bool compare_for_equality(const T &t, const U &u)
void issue_error_noreturn(ExceptionHandling handling, const char *file, int line, const char *function, const char *cond, const char *exc_name, ExceptionType e)
void abort(const ExceptionBase &exc) noexcept
void do_issue_error_nothrow(const ExceptionBase &e) noexcept
void issue_error_nothrow(const char *file, int line, const char *function, const char *cond, const char *exc_name, ExceptionType e) noexcept
void enable_abort_on_exception()
Definition exceptions.cc:92
void disable_abort_on_exception()
Definition exceptions.cc:84
void set_additional_assert_output(const char *const p)
void suppress_stacktrace_in_exceptions()
Definition exceptions.cc:76
typename argument_type< F >::type argument_type_t
STL namespace.