Consideremos el siguiente programa en C++:Por qué argumento de búsqueda Dependiente no funciona con plantilla de función dynamic_pointer_cast
#include <memory>
struct A {};
struct B : A {};
int main()
{
auto x = std::make_shared<A>();
if (auto p = dynamic_pointer_cast<B>(x));
}
Al compilar con MSVC 2010, me obtener el siguiente error:
error C2065: 'dynamic_pointer_cast' : undeclared identifier
el error persiste si auto
se reemplaza por std::shared_ptr<A>
. Cuando califico completamente la llamada con std::dynamic_pointer_cast
, el programa se compila con éxito.
Además, gcc 4.5.1 no le gusta, sea:
error: 'dynamic_pointer_cast' was not declared in this scope
pensé que std::dynamic_pointer_cast
habría sido escogido por Koenig lookup, ya que el tipo de x
vidas en el espacio de nombres std
. Que me estoy perdiendo aqui ?
¿Qué significa hacer que ** std :: dynamic_pointer_cast ** aparezca? – DumbCoder
@DumbCoder: como dije, el programa se compila cuando uso 'std :: dynamic_pointer_cast'. Solo tengo curiosidad sobre por qué el compilador no selecciona 'dynamic_pointer_cast' por ADL. –
Lo siento, ha robado esa parte, mi mal !! – DumbCoder