[#] Концепты для отчаявшихся
habrabot(difrex,1) — All
2016-07-05 14:00:04


Всё началось с того, что мне понадобилось написать функцию, принимающую на себя владение произвольным объектом. Казалось бы, что может быть проще:


template
void f (T t)
{
// Завладели экземпляром `t` типа `T`.
...

// Хочешь — переноси.
g(std::move(t));

// Не хочешь — не переноси.
...
}

Но есть один нюанс: требуется, чтобы принимаемый объект был строго `rvalue`. Следовательно, нужно:


1. Сообщать об ошибке компиляции при попытке передать `lvalue`.
2. Избежать лишнего вызова конструктора при создании объекта на стеке.

А вот это уже сложнее сделать.



Поясню.

[Читать дальше →][1]

[1]: https://habrahabr.ru/post/304728/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut