```
function() noexcept;
```

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

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

Otherwise, may throw bad_alloc
or any exception thrown by the copy constructor of the stored callable object.

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

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

Constraints: F is Lvalue-Callable ([func.wrap.func]) 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);
```

Constraints: decay_t<F> is Lvalue-Callable ([func.wrap.func])
for argument types ArgTypes... and return type R.

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

```
~function();
```