Except where explicitly allowed, the consequences are undefined if any
of the following actions are performed on an external symbol
of the COMMON-LISP
package:
Binding or altering its value (lexically or dynamically). (Some exceptions are noted below.)
Defining, undefining, or binding it as a function. (Some exceptions are noted below.)
Defining, undefining, or binding it as a macro or compiler macro.
(Some exceptions are noted below.)
Defining it as a type specifier (via defstruct, defclass, deftype, define-condition).
Defining it as a structure (via defstruct).
Defining it as a declaration with a declaration proclamation.
Defining it as a symbol macro.
Altering its home package.
Tracing it (via trace).
Declaring or proclaiming it special (via declare, declaim, or proclaim).
Declaring or proclaiming its type or ftype (via declare, declaim, or proclaim). (Some exceptions are noted below.)
Removing it from the COMMON-LISP
package.
Defining a setf expander for it (via defsetf or define-setf-method).
Defining, undefining, or binding its setf function name.
Defining it as a method combination type (via define-method-combination).
Using it as the class-name argument to setf of find-class.
Binding it as a catch tag.
Defining a method for a standardized generic function which is applicable when all of the arguments are direct instances of standardized classes.