File indexing completed on 2026-05-03 08:13:26
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef _LIBCPP___CXX03___CONCEPTS_CONSTRUCTIBLE_H
0010 #define _LIBCPP___CXX03___CONCEPTS_CONSTRUCTIBLE_H
0011
0012 #include <__cxx03/__concepts/convertible_to.h>
0013 #include <__cxx03/__concepts/destructible.h>
0014 #include <__cxx03/__config>
0015 #include <__cxx03/__type_traits/is_constructible.h>
0016
0017 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
0018 # pragma GCC system_header
0019 #endif
0020
0021 _LIBCPP_BEGIN_NAMESPACE_STD
0022
0023 #if _LIBCPP_STD_VER >= 20
0024
0025
0026 template <class _Tp, class... _Args>
0027 concept constructible_from = destructible<_Tp> && is_constructible_v<_Tp, _Args...>;
0028
0029
0030
0031 template <class _Tp>
0032 concept __default_initializable = requires { ::new _Tp; };
0033
0034 template <class _Tp>
0035 concept default_initializable = constructible_from<_Tp> && requires { _Tp{}; } && __default_initializable<_Tp>;
0036
0037
0038 template <class _Tp>
0039 concept move_constructible = constructible_from<_Tp, _Tp> && convertible_to<_Tp, _Tp>;
0040
0041
0042
0043 template <class _Tp>
0044 concept copy_constructible =
0045 move_constructible<_Tp> &&
0046 constructible_from<_Tp, _Tp&> && convertible_to<_Tp&, _Tp> &&
0047 constructible_from<_Tp, const _Tp&> && convertible_to<const _Tp&, _Tp> &&
0048 constructible_from<_Tp, const _Tp> && convertible_to<const _Tp, _Tp>;
0049
0050
0051 #endif
0052
0053 _LIBCPP_END_NAMESPACE_STD
0054
0055 #endif