¿Hay alguna ventaja de lanzar otra cosa que una std :: exception (o tipos derivados)

¿Hay alguna ventaja o uso de casos para lanzar otra cosa que sea una :: excepción estándar (o un tipo derivado).

Por ejemplothrow 1; othrow "error";

En otros términos por qué el estándar c ++ lo permite.