Byłem w stanie znaleźć wiele wątków na ten temat w przeszłości (np. here), ale takie rozmowy pochodzą sprzed dość dawna. Kod mam pytanie o to:Domyślny konstruktor przenoszenia w programie Visual Studio 2013 (aktualizacja 3)
#include <utility>
#include <iostream>
struct Foo
{
Foo() = default;
Foo(const Foo &o)
{
std::cout << "copy" << std::endl;
}
Foo(Foo &&o)
{
std::cout << "move" << std::endl;
}
};
struct Bar
{
Foo foo;
};
int main(void)
{
Bar a;
Bar b(a);
Bar c(std::move(a));
}
Jeśli wykonanie kodu w Visual Studio 2013 (aktualizacja 3), to wypisuje „kopiuj” dla obu przypadków. Jeśli standard nie zmienił się od czasu odpowiedzi w powyższym linku, wyjście powinno brzmieć "copy", a następnie "move". Ideone wydaje się dawać poprawne wyniki. Czy to po prostu coś, czego Visual Studio jeszcze nie zaimplementowało, czy jest coś czego brakuje w moim kodzie? I know that you cannot mark move constructors as default, ale to nie oznacza, że kompilator nie obsługuje generowania domyślnych konstruktorów ruchu łącznie.
To rozczarowuje. Znalazłem także [ten wykres] (http://blogs.msdn.com/b/somasegar/archive/2013/06/28/cpp-conformance-roadmap.aspx), więc wygląda na to, że vNext powinien go zaimplementować. Wygląda na to, że mam teraz kod do modyfikacji ... – Duncan
To jest do bani, jest do bani. –
Wygląda na to, że nie zostanie on zaimplementowany w VS2015 ... –