what() is a "virtual member function called what that returns a null-terminated character sequence (char *) and that can be overwritten in derived classes to contain some sort of description of the exception".
That is, what() is a virtual member (i.e. needs to be defined in a concrete derived class) that is part of the standard exception base class in the standard C++ library.
The STL exception classes only work with const char*.
To do what you want is non-trivial. However, you shouldn't be throwing exceptions containing characters outside the ASCII range anyway... so a simple copy from the exception string and a wchar_t string ought to work for you:
1 2
#include <algorithm>
#include <iterator>
1 2 3 4 5 6 7 8 9 10
catch (... e)
{
// Convert e.what() to a wide string
string cs( e.what() );
wstring ws;
copy( cs.begin(), cs.end(), back_inserter( ws ) );
// Do something with it...
wcerr << ws << endl;
}