--- /dev/null
+#ifndef STLPLUS_EXCEPTIONS\r
+#define STLPLUS_EXCEPTIONS\r
+////////////////////////////////////////////////////////////////////////////////\r
+\r
+// Author: Andy Rushton\r
+// Copyright: (c) Southampton University 1999-2004\r
+// (c) Andy Rushton 2004-2009\r
+// License: BSD License, see ../docs/license.html\r
+\r
+// The set of general exceptions thrown by STLplus components\r
+\r
+////////////////////////////////////////////////////////////////////////////////\r
+#include "containers_fixes.hpp"\r
+#include <stdexcept>\r
+#include <string>\r
+\r
+namespace stlplus\r
+{\r
+\r
+ ////////////////////////////////////////////////////////////////////////////////\r
+ // Thrown if a pointer or an iterator is dereferenced when it is null\r
+\r
+ class null_dereference : public std::logic_error\r
+ {\r
+ public:\r
+ null_dereference(const std::string& description) throw() :\r
+ std::logic_error(std::string("stlplus::null_dereference: ") + description) {}\r
+ ~null_dereference(void) throw() {}\r
+ };\r
+\r
+ ////////////////////////////////////////////////////////////////////////////////\r
+ // Thrown if an iterator is dereferenced when it is pointing to the end element\r
+\r
+ class end_dereference : public std::logic_error\r
+ {\r
+ public:\r
+ end_dereference(const std::string& description) throw() :\r
+ std::logic_error("stlplus::end_dereference: " + description) {}\r
+ ~end_dereference(void) throw() {}\r
+ };\r
+\r
+ ////////////////////////////////////////////////////////////////////////////////\r
+ // Thrown if an iterator is used with the wrong container. In other words, an\r
+ // iterator is created as a pointer to a sub-object within a container. If\r
+ // that iterator is then used with a different container, this exception is\r
+ // thrown.\r
+\r
+ class wrong_object : public std::logic_error\r
+ {\r
+ public:\r
+ wrong_object(const std::string& description) throw() :\r
+ std::logic_error("stlplus::wrong_object: " + description) {}\r
+ ~wrong_object(void) throw() {}\r
+ };\r
+\r
+ ////////////////////////////////////////////////////////////////////////////////\r
+ // Thrown if an attempt is made to copy an object that is uncopyable\r
+\r
+ class illegal_copy : public std::logic_error\r
+ {\r
+ public:\r
+ illegal_copy(const std::string& description) throw() :\r
+ std::logic_error("stlplus::illegal_copy: " + description) {}\r
+ ~illegal_copy(void) throw() {}\r
+ };\r
+\r
+ ////////////////////////////////////////////////////////////////////////////////\r
+\r
+} // end namespace stlplus\r
+\r
+#endif\r