diff --git a/src/operators.c b/src/operators.c
index ab50c2c6c97a456b62a4c950d94de9168c5c8c78..1b69832ea8a4bc69db92eec8c9784ec5dfe5c2bf 100644
--- a/src/operators.c
+++ b/src/operators.c
@@ -513,6 +513,11 @@ PMOD_EXPORT void o_cast(struct pike_type *type, INT32 run_time_type)
 
       stack_pop_keep_top();
 
+      if(TYPEOF(sp[-1]) == T_INT &&
+         SUBTYPEOF(sp[-1]) == NUMBER_UNDEFINED)
+        Pike_error("Cannot cast this object to %s.\n",
+                   get_name_of_type(type->type));
+
     } else
 
     switch(run_time_type)
@@ -724,11 +729,6 @@ PMOD_EXPORT void o_cast(struct pike_type *type, INT32 run_time_type)
     }
   }
 
-  if(TYPEOF(sp[-1]) == T_INT &&
-     SUBTYPEOF(sp[-1]) == NUMBER_UNDEFINED)
-    Pike_error("Cannot cast this object to %s.\n",
-               get_name_of_type(type->type));
-
   if(run_time_type != TYPEOF(sp[-1]))
   {
     switch(TYPEOF(sp[-1])) {