The type of the exception object is the static type of expression with top-level cv-qualifiers removed.
...
Unlike other temporary objects, the exception object is considered to be an lvalue argument when initializing the catch clause parameters, so it can be caught by lvalue reference, modified, and rethrown. http://en.cppreference.com/w/cpp/language/throw
If you throw a char* it can be catched by both char* and const char*.
If you throw a const char* it can only be catched by a const char*.
Note that this has nothing to do with what we discussed earlier because const here means that what is being pointed to is read-only, not that the pointer itself is read-only. You can catch both a char* and a const char* by reference or const-reference if you want.