Stroustrup recommends to inherit from std::exception
virtually, so that there is only one conversion path.
Personally, I find that working out a multiple inheritance scheme is probably over-engineering and prefer a linear inheritance chain... or just none at all.