#include <iostream>
#include <vector>

template<class T>
class vector_ref
{
public:
    vector_ref(T *pData, int pN) {Data = pData; N = pN;};
    T *Data;
    int N;
    vector_ref<T>& operator=(const std::vector<T> &v1)
    {
        for(int ii = 0; ii < N; ii++)
        {
            Data[ii] = v1[ii];
        }
        return *this;
    }
     std::vector<T> operator() ()
    {
        std::vector<T> v1(N);
        for(int ii = 0; ii < N; ii++)
        {
            v1[ii] = Data[ii];
        }
        return v1;
    }
    // std::vector<T>& operator ()()
    // {
        // std::vector<T> v1(N);
        // for(int ii = 0; ii < N; ii++)
        // {
            // v1[ii] = Data[ii];
        // }
        // return v1;
    // }
    // std::vector<T> tostring()
    // {
        // std::vector<T> v1(N);
    
    // }
};

template<class T>
void printVec(std::vector<T> v1)
{
    for(int ii = 0; ii < v1.size(); ii++)
    {
        std::cout << v1[ii] << std::endl;
    }
}

int main()
{
    std::vector<double> v,s;
    v.push_back(1.0);
    v.push_back(2.0);
    v.push_back(3.0);

    
    vector_ref<double> v_ref(&v[0],3);
    //s=v_ref.operator();
   printVec(v_ref()); // Compiler error

    return 0;
}