vendredi 22 juin 2018

not understanding double forwarding of an lvalue - when passed by value

#include <iostream>
#include <vector>
#include <type_traits>
#include <utility>

using namespace std;

template <typename Func, typename... Args>
void proxy(Func f, Args&&... args) {
    f(std::forward<Args>(args)...);
}

void real_func(vector<int> v) {
    cout << "size: " << v.size() << endl;
}

void multicast_func(vector<int> v) {
    proxy(real_func, std::forward<vector<int>>(v));
    proxy(real_func, std::forward<vector<int>>(v));
}

int main()
{
    vector<int> ints = {1, 2, 3};
    multicast_func(ints);
    return 0;
}

and the output is:

size: 3
size: 0

why isn't it 3, 3? at what point does this lvalue become an rvalue and gets moved-from?

Aucun commentaire:

Enregistrer un commentaire