Почему поиск, зависящий от аргумента, не работает с шаблоном функции dynamic_pointer_cast

Рассмотрим следующую программу на 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. Что мне здесь не хватает ?

26
задан Nawaz 22 February 2013 в 07:02
поделиться