CLS более строгий, чем CLR, что позволяет вам бросать и перехватывать объекты любого типа (даже типы значений). Почему?
Также что произойдет, если какой-то несовместимый с CLS код выбросит объект, не являющийся производным от исключения, при вызове кодом, совместимым с CLS?
ОБНОВЛЕНИЕ. На второй вопрос ответил @Marton. Все еще удивляюсь, почему.