std::exception کلاس abstract و کلی هست که بقیه exception ها ازش ارث بردن .
runtime_err هم از exception ارث برده و یکسری متد اضافه داره (مثلا سازنده مخصوص که string میگیره )
و این که چون std::exception سازنده که string بگیره نداره برای throw کردن ارور با پیغام مشخص نمیشه ازش استفاده کرد (البته visual studio چون استاندارد رو رعایت نکرده سازنده با char* هم داره )
پس یا از کلاس های استاندارد که ارث بردن مثل همین runtime_error اسفاده کنید .
اگر هم کلاس های استاندارد مناسب نبودن از exception ارث ببرید و اونو throw کنید .