Iros
 
Loading...
Searching...
No Matches
construct_at.h
Go to the documentation of this file.
1#pragma once
2
3#include "di/util/forward.h"
4#include "di/util/std_new.h"
5
6#ifndef DI_NO_USE_STD
7#include <memory>
8#else
9namespace std {
10template<typename T, typename... Args>
11constexpr auto construct_at(T* location, Args&&... args) -> T* {
12 return ::new (const_cast<void*>(static_cast<void const volatile*>(location))) T(di::util::forward<Args>(args)...);
13}
14}
15#endif
16
17namespace di::util {
18namespace detail {
20 template<typename T, typename... Args>
21 constexpr auto operator()(T* location, Args&&... args) const -> T* requires(requires {
22 std::construct_at(location, util::forward<Args>(args)...);
23 }) { return std::construct_at(location, util::forward<Args>(args)...); }
24 };
25}
26
27constexpr inline auto construct_at = detail::ConstructAtFunction {};
28}
29
30namespace di {
32}
Definition clamp.h:9
Definition vocab.h:96
constexpr auto construct_at
Definition construct_at.h:27
Definition zstring_parser.h:9
Definition enable_generate_structed_bindings.h:46
@ T
Definition key.h:29
Definition construct_at.h:19
constexpr auto operator()(T *location, Args &&... args) const -> T *requires(
Definition construct_at.h:21