#include <iostream>
#include <vector>
#include <typeinfo>
#include <memory>
#include <boost/iterator/indirect_iterator.hpp>
using namespace std;

struct HeavyResource{};
class Owner
{
private:
    vector<unique_ptr<HeavyResource>> _vectorOfHeavyResources;
public:
    using ResourceIterator =
     boost::indirect_iterator<std::vector<std::unique_ptr<HeavyResource>>::iterator,
                              const HeavyResource>;
    ResourceIterator begin() { return std::begin(_vectorOfHeavyResources); }
    ResourceIterator end() { return std::end(_vectorOfHeavyResources); }
    Owner() : _vectorOfHeavyResources(5)
    {}
};


int main() {
	Owner o;
	for (const auto& b : o)
	{
		cout << typeid(b).name() << endl;
	}
	return 0;
}