В визуальной студии реализована «семантика перемещения» и «ссылка на значение»

Я наткнулся на видео на Youtube о параллелизме c ++ 11 (часть 3) и следующий код, который компилирует и генерирует правильный результат в видео.

Однако я получил ошибку компиляции этого кода с использованием Visual Studio 2012. Компилятор жалуется на тип аргументаtoSin(list<double>&&), Если я изменю тип аргумента наlist<double>&Код скомпилирован.

Мой вопрос в том, что возвращаетсяmove(list) в_tmain()Это ссылка или просто ссылка?

#include "stdafx.h"
#include <iostream>
#include <thread>
#include <chrono>
#include <list>
#include <algorithm>
using namespace std;

void toSin(list<double>&& list)
{
    //this_thread::sleep_for(chrono::seconds(1));
    for_each(list.begin(), list.end(), [](double & x)
    {
        x = sin(x);
    });

    for_each(list.begin(), list.end(), [](double & x)
    {
        int count = static_cast<int>(10*x+10.5);
        for (int i=0; i<count; ++i)
        {
            cout.put('*');
        }
        cout << endl;
    });
}    

int _tmain(int argc, _TCHAR* argv[])
{
    list<double> list;

    const double pi = 3.1415926;
    const double epsilon = 0.00000001;
    for (double x = 0.0; x<2*pi+epsilon; x+=pi/16)
    {
        list.push_back(x);
    }

    thread th(&toSin, /*std::ref(list)*/std::move(list));
    th.join();    

    return 0;
}

Ответы на вопрос(2)

Ваш ответ на вопрос