176d0caaeSpatrick //===----------------------------------------------------------------------===// 276d0caaeSpatrick // 376d0caaeSpatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 476d0caaeSpatrick // See https://llvm.org/LICENSE.txt for license information. 576d0caaeSpatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 676d0caaeSpatrick // 776d0caaeSpatrick //===----------------------------------------------------------------------===// 876d0caaeSpatrick 976d0caaeSpatrick #ifndef _LIBCPP___FUNCTIONAL_UNWRAP_REF_H 1076d0caaeSpatrick #define _LIBCPP___FUNCTIONAL_UNWRAP_REF_H 1176d0caaeSpatrick 1276d0caaeSpatrick #include <__config> 13*4bdff4beSrobert #include <__type_traits/decay.h> 1476d0caaeSpatrick 1576d0caaeSpatrick #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 1676d0caaeSpatrick # pragma GCC system_header 1776d0caaeSpatrick #endif 1876d0caaeSpatrick 1976d0caaeSpatrick _LIBCPP_BEGIN_NAMESPACE_STD 2076d0caaeSpatrick 2176d0caaeSpatrick template <class _Tp> 22*4bdff4beSrobert struct __unwrap_reference { typedef _LIBCPP_NODEBUG _Tp type; }; 2376d0caaeSpatrick 2476d0caaeSpatrick template <class _Tp> 2576d0caaeSpatrick class reference_wrapper; 2676d0caaeSpatrick 2776d0caaeSpatrick template <class _Tp> 28*4bdff4beSrobert struct __unwrap_reference<reference_wrapper<_Tp> > { typedef _LIBCPP_NODEBUG _Tp& type; }; 2976d0caaeSpatrick 3076d0caaeSpatrick template <class _Tp> 3176d0caaeSpatrick struct decay; 3276d0caaeSpatrick 3376d0caaeSpatrick #if _LIBCPP_STD_VER > 17 3476d0caaeSpatrick template <class _Tp> 3576d0caaeSpatrick struct unwrap_reference : __unwrap_reference<_Tp> { }; 3676d0caaeSpatrick 3776d0caaeSpatrick template <class _Tp> 3876d0caaeSpatrick using unwrap_reference_t = typename unwrap_reference<_Tp>::type; 3976d0caaeSpatrick 4076d0caaeSpatrick template <class _Tp> 4176d0caaeSpatrick struct unwrap_ref_decay : unwrap_reference<typename decay<_Tp>::type> { }; 4276d0caaeSpatrick 4376d0caaeSpatrick template <class _Tp> 4476d0caaeSpatrick using unwrap_ref_decay_t = typename unwrap_ref_decay<_Tp>::type; 4576d0caaeSpatrick #endif // > C++17 4676d0caaeSpatrick 4776d0caaeSpatrick template <class _Tp> 4876d0caaeSpatrick struct __unwrap_ref_decay 4976d0caaeSpatrick #if _LIBCPP_STD_VER > 17 5076d0caaeSpatrick : unwrap_ref_decay<_Tp> 5176d0caaeSpatrick #else 5276d0caaeSpatrick : __unwrap_reference<typename decay<_Tp>::type> 5376d0caaeSpatrick #endif 5476d0caaeSpatrick { }; 5576d0caaeSpatrick 5676d0caaeSpatrick _LIBCPP_END_NAMESPACE_STD 5776d0caaeSpatrick 5876d0caaeSpatrick #endif // _LIBCPP___FUNCTIONAL_UNWRAP_REF_H 59