This subclass of PlExceptionBase is used to represent 
exceptions.
PlException, there are convenience functions that create 
and wrap a Prolog term, similar to the PL_domain_error(), etc. 
The hierarchy allows catch statements to easily handle 
combinations.
A PlException object contains a Prolog term, so its
what() method must be called either 
within a Prolog predicate or within the context of a PlEngine 
(and PlFrame; see section 
1.16). The term is copied so that it is available outside of the 
context of the frame that created it.
std::exception
*-- PlExceptionBase
    *-- PlException
    |   *.. PlDomainError()
    |   *.. PlExistenceError()
    |   *.. PlGeneralError()
    |   *.. PlInstantiationError()
    |   *.. PlPermissionError()
    |   *.. PlRepresentationError()
    |   *.. PlResourceError()
    |   *.. PlTypeError()
    |   *.. PlUninstantiationError()
    |   *.. PlUnknownError()
    *-- PlExceptionFailBase
    |   *-- PlExceptionFail
    |   *-- PlFail
    *-- PlEngineInitialisationFailed
    *-- PlOpenForeignFrameFailed
Note that everything under PlException can contain a 
Prolog term; if the what() method is 
called, it must be within the context of a Prolog frame. If you wish to 
pass the exception outside the frame, you can use the set_what_str() 
method to avoid evaluating the term after it has been freed by Prolog:
  try
  { PlCall("p(123)");
      ...
  } catch ( PlException &ex )
  { ex.set_what_str();
    throw; // rethrow the exception
  }
Currently defined methods are:
  ...;
  try
  { PlCall("consult(load)");
  } catch ( const PlException& ex )
  { cerr << ex.as_string() << endl;
  }
A type error expresses that a term does not satisfy the expected basic Prolog type.
A domain error expresses that a term satisfies the basic 
Prolog type expected, but is unacceptable to the restricted domain 
expected by some operation. For example, the standard Prolog open/3 
call expect an io_mode (read, write, append, ...). If an 
integer is provided, this is a type error, if an atom other 
than one of the defined io-modes is provided it is a domain error.