У меня есть программа Visual Studio 2008 C ++, где у меня есть собственная потоковая реализация.Примерно так:
class Foo : public std::ostream
{
public:
Foo( int a ) : std::ostream( &buf_ ) { };
Foo( boost::shared_ptr< int > a ) : std::ostream( &buf_ ) { };
private:
std::filebuf buf_;
};
class Bar
{
public:
Foo GetFoo() { return Foo( 1 ); };
Foo GetFoo2() { return Foo( boost::shared_ptr< int >( new int( 1 ) ) ); };
};
Предполагаемое использование выглядит следующим образом:
Bar b;
Foo f = b.GetFoo(); // works fine
Foo f2 = b.GetFoo2(); // compiler error
К сожалению, это дает мне ошибку компилятора о конструкторе копирования basic_ios.
error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'
Почему первый Foo( int )
конструктор работает с компилятором, а тот, в котором задействован boost::shared_ptr
- нет?
Спасибо, PaulH