Запретить привязку rvalue через конструктор к константной ссылке

Я работаю над классом матричного представления, конструктор которого принимает матрицу в качестве параметра и привязывает ее к const референтный член. Я бы очень хотел избежать связывания значений r, так как они не связываются через параметр конструктора, и в итоге мы получаем висячую ссылку. Я придумал следующее (упрощенный код):

struct Foo{};

class X
{
const Foo& _foo;
public:
X(const Foo&&) = delete;       // prevents rvalue binding
X(const Foo& foo): _foo(foo){} // lvalue is OK
};

Foo get_Foo()
{
return {};
}

const Foo get_const_Foo()
{
return {};
}

Foo& get_lvalue_Foo()
{
static Foo foo;
return foo;
}

int main()
{
//  X x1{get_Foo()};        // does not compile, use of deleted function
//  X x2{get_const_Foo()};  // does not compile, use of deleted function
X x3{get_lvalue_Foo()}; // this should be OK
}

В основном я удаляю конструктор, который принимает const Foo&& в качестве параметра. Обратите внимание, что мне нужно const так как в противном случае кто-то может вернуться const Foo от функции, и в этом случае он будет привязан к const Foo& конструктор.

Вопрос:

Это правильная парадигма отключения привязки rvalue? Я что-то пропустил?

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]