diff --git a/include/__config b/include/__config index e28fc5d58..bb3624485 100644 --- a/include/__config +++ b/include/__config @@ -756,7 +756,7 @@ template struct __static_assert_check {}; # elif __cplusplus <= 201402L # define _LIBCPP_STD_VER 14 # else -# define _LIBCPP_STD_VER 15 // current year, or date of c++17 ratification +# define _LIBCPP_STD_VER 16 // current year, or date of c++17 ratification # endif #endif // _LIBCPP_STD_VER diff --git a/include/memory b/include/memory index 47963e08a..50a1f00a5 100644 --- a/include/memory +++ b/include/memory @@ -361,6 +361,7 @@ class shared_ptr { public: typedef T element_type; + typedef weak_ptr weak_type; // C++17 // constructors: constexpr shared_ptr() noexcept; @@ -3863,6 +3864,9 @@ class _LIBCPP_TYPE_VIS_ONLY shared_ptr { public: typedef _Tp element_type; +#if _LIBCPP_STD_VER > 14 + typedef weak_ptr<_Tp> weak_type; +#endif private: element_type* __ptr_; __shared_weak_count* __cntrl_; diff --git a/test/std/utilities/memory/util.smartptr/util.smartptr.shared/types.pass.cpp b/test/std/utilities/memory/util.smartptr/util.smartptr.shared/types.pass.cpp index 817531233..f44c05eb7 100644 --- a/test/std/utilities/memory/util.smartptr/util.smartptr.shared/types.pass.cpp +++ b/test/std/utilities/memory/util.smartptr/util.smartptr.shared/types.pass.cpp @@ -13,14 +13,20 @@ // { // public: // typedef T element_type; +// typedef weak_ptr weak_type; // C++17 // ... // }; #include +#include "test_macros.h" + struct A; // purposefully incomplete int main() { static_assert((std::is_same::element_type, A>::value), ""); +#if TEST_STD_VER > 14 + static_assert((std::is_same::weak_type, std::weak_ptr>::value), ""); +#endif } diff --git a/test/support/test_macros.h b/test/support/test_macros.h index ada4a961a..a072e31b7 100644 --- a/test/support/test_macros.h +++ b/test/support/test_macros.h @@ -43,7 +43,7 @@ #elif __cplusplus <= 201402L # define TEST_STD_VER 14 #else -# define TEST_STD_VER 99 // greater than current standard +# define TEST_STD_VER 16 // current year; greater than current standard #endif #endif