Какой тип я должен поймать, если я выброшу строковый литерал?

Я пишу довольно простое приложение на C ++ с использованием g ++ под Linux, и я пытаюсь выбросить необработанные строки в качестве исключений (да, я знаю, это не очень хорошая практика).

У меня есть следующий код (упрощенный):

int main()
{
  try
  {
    throw "not implemented";

  }
  catch(std::string &error)
  {
    cerr<<"Error: "<<error<<endl;
  }
  catch(char* error)
  {
    cerr<<"Error: "<<error<<endl;
  }
  catch(...)
  {
    cerr<<"Unknown error"<<endl;
  }
}

И я получаю Неизвестную ошибку на консоли. Но если я статически приведу литеральную строку к std :: string или char * он печатает Ошибка: не реализовано , как ожидалось. Мой вопрос: так какой тип я должен поймать, если я этого не сделаю? Не хотите использовать статическое приведение?

22
задан 眠りネロク 20 September 2018 в 13:08
поделиться