template < typename T>
std:: shared_ptr < std:: vector < T>> BlobPtr< T> :: check ( std:: size_t i, std:: string & msg) const
{
auto ret = wptr.lock ( ) ;
if ( ! ret)
throw std:: runtime_error ( "Unbound BlobPtr" ) ;
if ( i >= ret- > size( ) )
throw std:: out_of_range ( msg) ;
return ret;
}
template < typename T>
BlobPtr< T> & BlobPtr< T> :: operator ++ ( )
{
check( curr, std:: string ( "Increment past end" ) ) ;
++ curr;
return * this ;
}
template < typename T>
BlobPtr< T> & BlobPtr< T> :: operator -- ( )
{
check( curr, "Decrement before begin" ) ;
-- curr;
return * this ;
}
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0ZDo6c2hhcmVkX3B0cjxzdGQ6OnZlY3RvcjxUPj4gQmxvYlB0cjxUPjo6Y2hlY2soc3RkOjpzaXplX3QgaSwgc3RkOjpzdHJpbmcmIG1zZykgY29uc3QKewoJYXV0byByZXQgPSB3cHRyLmxvY2soKTsKCWlmICghcmV0KQoJCXRocm93IHN0ZDo6cnVudGltZV9lcnJvcigiVW5ib3VuZCBCbG9iUHRyIik7CglpZiAoaSA+PSByZXQtPnNpemUoKSkKCQl0aHJvdyBzdGQ6Om91dF9vZl9yYW5nZShtc2cpOwoJcmV0dXJuIHJldDsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CkJsb2JQdHI8VD4mIEJsb2JQdHI8VD46Om9wZXJhdG9yKysoKQp7CgljaGVjayhjdXJyLCBzdGQ6OnN0cmluZygiSW5jcmVtZW50IHBhc3QgZW5kIikpOwoJKytjdXJyOwoJcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KQmxvYlB0cjxUPiYgQmxvYlB0cjxUPjo6b3BlcmF0b3ItLSgpCnsKCWNoZWNrKGN1cnIsICJEZWNyZW1lbnQgYmVmb3JlIGJlZ2luIik7CgktLWN1cnI7CglyZXR1cm4gKnRoaXM7Cn0=
compilation info
prog.cpp:2:6: error: ‘shared_ptr’ in namespace ‘std’ does not name a template type
std::shared_ptr<std::vector<T>> BlobPtr<T>::check(std::size_t i, std::string& msg) const
^~~~~~~~~~
prog.cpp:13:1: error: ‘BlobPtr’ does not name a type
BlobPtr<T>& BlobPtr<T>::operator++()
^~~~~~~
prog.cpp:21:1: error: ‘BlobPtr’ does not name a type
BlobPtr<T>& BlobPtr<T>::operator--()
^~~~~~~
stdout