Я пытаюсь понять, почему кто-то может написать функцию, которая принимает ссылку на константу rvalue .
В приведенном ниже примере кода для чего предназначена функция ссылки на константу rvalue (возврат " 3 "). И почему разрешение перегрузки отдает предпочтение константе Rvalue над ссылочной функцией const LValue (возвращающей "2").
#include <string>
#include <vector>
#include <iostream>
std::vector<std::string> createVector() { return std::vector<std::string>(); }
//takes movable rvalue
void func(std::vector<std::string> &&p) { std::cout << "1"; }
//takes const lvalue
void func(const std::vector<std::string> &p) { std::cout << "2"; }
//takes const rvalue???
//what is the point of const rvalue? if const I assume it is not movable?
void func(const std::vector<std::string> &&p) { std::cout << "3"; }
int main()
{
func(createVector());
return 0;
}