Рассмотрим следующую программу на C++:
#include
struct A {};
struct B : A {};
int main()
{
auto x = std::make_shared();
if (auto p = dynamic_pointer_cast(x));
}
При компиляции с помощью MSVC 2010 я получаю следующую ошибку:
error C2065: 'dynamic_pointer_cast' : undeclared identifier
Ошибка сохраняется, если auto
заменить на std:: shared_ptr
. Когда я полностью определяю вызов с помощью std::dynamic_pointer_cast
, программа успешно компилируется.
Кроме того, gcc 4.5.1это тоже не нравится:
error: 'dynamic_pointer_cast' was not declared in this scope
Я думал, что std::dynamic_pointer_cast
будет выбран поиском Кенига] , так как тип x
находится в пространстве имен std
. Что мне здесь не хватает ?