В Visual C++ (2008 и 2010), следующий код не компилируется со следующей ошибкой:станд :: make_shared в качестве аргумента по умолчанию не компилируется
#include <memory>
void Foo(std::shared_ptr<int> test = ::std::make_shared<int>(5))
{
}
class P
{
void
Foo(std::shared_ptr<int> test = ::std::make_shared<int>(5))
{
}
};
ошибка C2039: «make_shared»: не членом '' глобального пространства имен'»
ошибка C3861: '' make_shared: идентификатор не найден
Он жалуется на определение P :: Foo() не :: Foo().
Кто-нибудь знает, почему это действительно для Foo(), чтобы иметь аргумент по умолчанию с std :: make_shared, но не P :: Foo()?
Обратите внимание, что в Visual C++ 2008 'shared_ptr' находится в' std :: tr1', а 'make_shared' не реализован (' make_shared' не был частью TR1). –
звучит так, как будто вы делаете ':: make_shared' –
Игнорируйте бит 2008 года, я запутал IDE с компилятором. –