[func.wrap.copy.general]

# 22 General utilities library [[utilities]](./#utilities)

## 22.10 Function objects [[function.objects]](function.objects#func.wrap.copy.general)

### 22.10.17 Polymorphic function wrappers [[func.wrap]](func.wrap#copy.general)

#### 22.10.17.5 Copyable wrapper [[func.wrap.copy]](func.wrap.copy#general)

#### 22.10.17.5.1 General [func.wrap.copy.general]

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L14482)

The header provides partial specializations of copyable_function for each combination of the possible replacements
of the placeholders cv, *ref*, and *noex* where

- [(1.1)](#1.1)

cv is either const or empty,

- [(1.2)](#1.2)

*ref* is either &, &&, or empty, and

- [(1.3)](#1.3)

*noex* is either true or false[.](#1.sentence-1)

[2](#2)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L14495)

For each of the possible combinations of the placeholders mentioned above,
there is a placeholder *inv-quals* defined as follows:

- [(2.1)](#2.1)

If *ref* is empty, let *inv-quals* be cv&,

- [(2.2)](#2.2)

otherwise, let *inv-quals* be cv *ref*[.](#2.sentence-1)
