[specialized.construct] # 26 Algorithms library [[algorithms]](./#algorithms) ## 26.11 Specialized algorithms [[specialized.algorithms]](specialized.algorithms#specialized.construct) ### 26.11.8 construct_at [specialized.construct] [🔗](#lib:construct_at) `template constexpr T* construct_at(T* location, Args&&... args); namespace ranges { template constexpr T* construct_at(T* location, Args&&... args); } ` [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/algorithms.tex#L14191) *Constraints*: is_unbounded_array_v is false[.](#1.sentence-1) The expression ​::​new (declval()) T(declval()...) is well-formed when treated as an unevaluated operand ([[expr.context]](expr.context#term.unevaluated.operand "7.2.3 Context dependence"))[.](#1.sentence-2) [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/algorithms.tex#L14197) *Mandates*: If is_array_v is true, sizeof...(Args) is zero[.](#2.sentence-1) [3](#3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/algorithms.tex#L14201) *Effects*: Equivalent to:if constexpr (is_array_v)return ::new (*voidify*(*location)) T[1]();elsereturn ::new (*voidify*(*location)) T(std::forward(args)...);