```
function() noexcept;
```

```
function(nullptr_t) noexcept;
```

```
function(const function& f);
```

```
function(function&& f);
```

```
template<class F> function(F f);
```

Remarks: This constructor template shall not participate in overload resolution unless
F is Lvalue-Callable for argument types
ArgTypes... and return type R.

```
template<class F> function(F) -> function<see below>;
```

```
function& operator=(const function& f);
```

```
function& operator=(function&& f);
```

```
function& operator=(nullptr_t) noexcept;
```

```
template<class F> function& operator=(F&& f);
```

Remarks: This assignment operator shall not participate in overload
resolution unless decay_t<F> is
Lvalue-Callable for argument types ArgTypes... and
return type R.

```
template<class F> function& operator=(reference_wrapper<F> f) noexcept;
```

```
~function();
```