请教一个有关容器拷贝的有关问题

请问一个有关容器拷贝的问题
请问下面的代码为何不能运行:
代码如下:
#include<iostream>
using std::cout;
using std::endl;

#include<vector>
using std::vector;

#include<set>
using std::set;

#include<algorithm>
using std::for_each;

class val_of_vector
{
public:
    val_of_vector()=default;
    val_of_vector(const vector<double>&vd)
    :v_v(vd){}
    vector<double> re_val()const{return v_v;}
private:
    vector<double> v_v;
};

int main()
{
    vector<double>vb;
    for(size_t i=0;i<10;i++)
        vb.emplace_back(i%2);
    val_of_vector v0(vb);

    set<double>sd0(v0.re_val().begin(),v0.re_val().end());
    for_each(sd0.begin(),sd0.end(),
             [](const double &d)
             {
                 cout<<d<<" ";
             }
             );
    cout<<endl;



    return 0;
}


------解决思路----------------------
每次调用re_val()的时候都会生成一个临时对象
------解决思路----------------------
引用:
生成临时对象为何会出错

set<double>sd0(v0.re_val().begin(),v0.re_val().end());

就变成了类似
set<double>sd0(A.begin(),B.end());

当然会出错