MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
construct.hpp
浏览该文件的文档.
1#ifndef MSTL_CORE_MEMORY_CONSTRUCT_HPP__
2#define MSTL_CORE_MEMORY_CONSTRUCT_HPP__
3
11
14
20
32template <typename T, typename... Args>
33MSTL_CONSTEXPR20 enable_if_t<is_constructible_v<T, Args...>, void*>
34construct(T* ptr, Args&&... args)
35noexcept(is_nothrow_constructible_v<T, Args...>) {
36 return new (static_cast<void*>(ptr)) T(_MSTL forward<Args>(args)...);
37}
38
46template <typename T>
47MSTL_CONSTEXPR20 void destroy(T* pointer)
48noexcept(is_nothrow_destructible_v<T>) {
49 pointer->~T();
50}
51
61template <typename Iterator, enable_if_t<
62 is_iter_v<Iterator> && !is_trivially_destructible_v<iter_value_t<Iterator>>, int> = 0>
63MSTL_CONSTEXPR20 void destroy(Iterator first, Iterator last)
64noexcept(is_nothrow_destructible_v<iter_value_t<Iterator>>) {
65 for (; first < last; ++first) _MSTL destroy(&*first);
66}
67
77template <typename Iterator, enable_if_t<
78 is_iter_v<Iterator> && is_trivially_destructible_v<iter_value_t<Iterator>>, int> = 0>
79MSTL_CONSTEXPR20 void destroy(Iterator first, Iterator last) noexcept {}
80 // InplaceMemoryFunction
82
84#endif // MSTL_CORE_MEMORY_CONSTRUCT_HPP__
MSTL概念和类型约束
MSTL_NODISCARD constexpr T && forward(remove_reference_t< T > &x) noexcept
完美转发左值
MSTL_CONSTEXPR20 enable_if_t< is_constructible_v< T, Args... >, void * > construct(T *ptr, Args &&... args) noexcept(is_nothrow_constructible_v< T, Args... >)
在指定内存位置构造对象
MSTL_CONSTEXPR20 void destroy(T *pointer) noexcept(is_nothrow_destructible_v< T >)
销毁单个对象
MSTL_INLINE17 constexpr bool is_iter_v
检查类型是否为迭代器
#define _MSTL
全局命名空间MSTL前缀
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
typename enable_if< Test, T >::type enable_if_t
enable_if的便捷别名