Visual C++ (2008 および 2010) では、次のコードは次のエラーでコンパイルされません。
#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': 識別子が見つかりません
::Foo() ではなく P::Foo() の定義について不平を言っています。
P::Foo() ではなく std::make_shared でデフォルト引数を持つことが Foo() にとって有効である理由を誰かが知っていますか?