Почему bad_alloc(const char*) был сделан закрытым в Visual C++ 2012?

Я просто пытаюсь скомпилировать немного больший проект, используя Visual Studio 2012 Release Candidate, C++. Проект был/скомпилирован с использованием VS2010. (Я просто жаден до C++11, поэтому я попробовал. :)

Помимо того, что я могу объяснить сам, в проекте используется такой код:

ostringstream ostr;
ostr << "The " __FUNCTION__ "() failed to malloc(" << i << ").";
throw bad_alloc(ostr.str().c_str());

Компилятор теперь жалуется

error C2248: 'std::bad_alloc::bad_alloc' : cannot access private member declared 
    in class 'std::bad_alloc'

... это правда. Эта версия конструктора теперь закрытая.

По какой причине эта версия конструктора была закрытой? Рекомендуется ли стандарт C++11 не использовать этот конструктор с аргументом ?

(Я могу себе представить, что если выделение не удалось, это может вызвать больше проблем при попытке создать что-то новое. Однако это только мое предположение.)

Спасибо, Петр

7
задан pepr 21 June 2012 в 07:25
поделиться