выделение памяти это мЕньшая проблема, std::filesystem_error от MS до недавнего времени в конструкторе бросала std::system_error, потому что не могла сконвертировать юникодные пути в ACP, чтобы в строку ошибки записать
Вот именно по этой причине у меня объект исключение надо сначала создать, так как его внутренний буфер в куче известен только в момент, когда хочется бросить исключение. Я сначала создам объект и лишь потом брошу. Отдельными строчками кода.