#include <iostream>
#include <vector>

template <typename T>
struct wrapper
{
    wrapper<T>* operator ->() { return this; }
    
    std::vector<T>& myvec;
};

template <typename T>
class B
{
public:
    std::vector<T> data;

    B(const std::vector<T>& init) : data(init) {}

    wrapper<T> operator -> () { return {data}; }
    
};

int main()
{
    B<double> obj({1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0});

    obj->myvec[4] = -obj->myvec[4];
    
    for (const auto& d : obj->myvec) {
        std::cout << d << std::endl;
    }
}