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