Добрый день,
имеется такой сферический в вакууме код
#include <iostream>
class A
{
int i;
public:
A() {std::cout << "A" << std::endl;}
A(const A&) {std::cout << "const A&" << std::endl;}
// A(A&&) {std::cout << "A&&" << std::endl;}
A(A&&) = delete;
~A() {std::cout << "~A" << std::endl;}
};
void f(A a)
{
}
int main()
{
f(A());
return 0;
}
В g++ 6.3 (с -std=c++17) это не компилируется с ошибкой error:
use of deleted function ‘A::A(A&&)’
В g++ 7.2 (с -std=c++17) это собирается.
Вопрос: появилось ли в конечном варианте стандарта какое-нибудь требование относительно этого поведения? Если нет, то чем объяснить такое поведение компиляторов.