[func.bind.partial] # 22 General utilities library [[utilities]](./#utilities) ## 22.10 Function objects [[function.objects]](function.objects#func.bind.partial) ### 22.10.14 Function templates bind_front and bind_back [func.bind.partial] [🔗](#lib:bind_front) `template constexpr unspecified bind_front(F&& f, Args&&... args); template constexpr unspecified bind_back(F&& f, Args&&... args); ` [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L13206) Within this subclause: - [(1.1)](#1.1) g is a value of the result of a bind_front or bind_back invocation, - [(1.2)](#1.2) FD is the type decay_t, - [(1.3)](#1.3) fd is the target object of g ([[func.def]](func.def "22.10.3 Definitions")) of type FD, direct-non-list-initialized with std​::​forward(f), - [(1.4)](#1.4) BoundArgs is a pack that denotes decay_t..., - [(1.5)](#1.5) bound_args is a pack of bound argument entities of g ([[func.def]](func.def "22.10.3 Definitions")) of types BoundArgs..., direct-non-list-initialized with std​::​forward(args)..., respectively, and - [(1.6)](#1.6) call_args is an argument pack used in a function call expression ([[expr.call]](expr.call "7.6.1.3 Function call")) of g[.](#1.sentence-1) [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L13226) *Mandates*: is_constructible_v && is_move_constructible_v &&(is_constructible_v && ...) &&(is_move_constructible_v && ...) is true[.](#2.sentence-1) [3](#3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L13236) *Preconditions*: FD meets the [*Cpp17MoveConstructible*](utility.arg.requirements#:Cpp17MoveConstructible "16.4.4.2 Template argument requirements [utility.arg.requirements]") requirements[.](#3.sentence-1) For each Ti in BoundArgs, if Ti is an object type,Ti meets the [*Cpp17MoveConstructible*](utility.arg.requirements#:Cpp17MoveConstructible "16.4.4.2 Template argument requirements [utility.arg.requirements]") requirements[.](#3.sentence-2) [4](#4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L13243) *Returns*: A perfect forwarding call wrapper ([[func.require]](func.require#term.perfect.forwarding.call.wrapper "22.10.4 Requirements")) g with call pattern: - [(4.1)](#4.1) invoke(fd, bound_args..., call_args...) for a bind_front invocation, or - [(4.2)](#4.2) invoke(fd, call_args..., bound_args...) for a bind_back invocation[.](#4.sentence-1) [5](#5) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L13256) *Throws*: Any exception thrown by the initialization of the state entities of g ([[func.def]](func.def "22.10.3 Definitions"))[.](#5.sentence-1) [🔗](#lib:bind_front_) `template constexpr unspecified bind_front(Args&&... args); template constexpr unspecified bind_back(Args&&... args); ` [6](#6) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L13272) Within this subclause: - [(6.1)](#6.1) F is the type of f, - [(6.2)](#6.2) g is a value of the result of a bind_front or bind_back invocation, - [(6.3)](#6.3) BoundArgs is a pack that denotes decay_t..., - [(6.4)](#6.4) bound_args is a pack of bound argument entities ofg ([[func.def]](func.def "22.10.3 Definitions")) of types BoundArgs..., direct-non-list-initialized with std​::​forward(args)..., respectively, and - [(6.5)](#6.5) call_args is an argument pack used in a function call expression ([[expr.call]](expr.call "7.6.1.3 Function call")) of g[.](#6.sentence-1) [7](#7) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L13292) *Mandates*: - [(7.1)](#7.1) (is_constructible_v && ...) is true, and - [(7.2)](#7.2) (is_move_constructible_v && ...) is true, and - [(7.3)](#7.3) if is_pointer_v || is_member_pointer_v is true, then f != nullptr is true[.](#7.sentence-1) [8](#8) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L13304) *Preconditions*: For each Ti in BoundArgs,Ti meets the [*Cpp17MoveConstructible*](utility.arg.requirements#:Cpp17MoveConstructible "16.4.4.2 Template argument requirements [utility.arg.requirements]") requirements[.](#8.sentence-1) [9](#9) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L13309) *Returns*: A perfect forwarding call wrapper ([[func.require]](func.require "22.10.4 Requirements")) g that does not have a target object, and has the call pattern: - [(9.1)](#9.1) invoke(f, bound_args..., call_args...) for a bind_front invocation, or - [(9.2)](#9.2) invoke(f, call_args..., bound_args...) for a bind_back invocation[.](#9.sentence-1) [10](#10) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L13322) *Throws*: Any exception thrown by the initialization of bound_args[.](#10.sentence-1)