Выдержка из стандарта 20.12 [function.objects]:
template <class T> reference_wrapper<T> ref(T&) noexcept;
template <class T> reference_wrapper<const T> cref(const T&) noexcept;
template <class T> void ref(const T&&) = delete;
template <class T> void cref(const T&&) = delete;
Я привык видеть =delete
в контексте функций-членов. Цель состоит в том, чтобы запретить операцию, предоставленную компилятором. Например, чтобы сделать класс не скопированным или не движимым.
В этом контексте, однако, намерение представляет собой документацию о намерении. Это правильно? Существуют ли какие-либо другие случаи, когда использование =delete
для функции, не являющейся членом, желательно, предпочтительно или неизбежно?