1*4bdff4beSrobert //===----------------------------------------------------------------------===// 2*4bdff4beSrobert // 3*4bdff4beSrobert // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*4bdff4beSrobert // See https://llvm.org/LICENSE.txt for license information. 5*4bdff4beSrobert // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*4bdff4beSrobert // 7*4bdff4beSrobert //===----------------------------------------------------------------------===// 8*4bdff4beSrobert 9*4bdff4beSrobert #ifndef _LIBCPP___CONCEPTS_COMMON_WITH_H 10*4bdff4beSrobert #define _LIBCPP___CONCEPTS_COMMON_WITH_H 11*4bdff4beSrobert 12*4bdff4beSrobert #include <__concepts/common_reference_with.h> 13*4bdff4beSrobert #include <__concepts/same_as.h> 14*4bdff4beSrobert #include <__config> 15*4bdff4beSrobert #include <__type_traits/add_lvalue_reference.h> 16*4bdff4beSrobert #include <__type_traits/common_reference.h> 17*4bdff4beSrobert #include <__type_traits/common_type.h> 18*4bdff4beSrobert #include <__utility/declval.h> 19*4bdff4beSrobert 20*4bdff4beSrobert #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 21*4bdff4beSrobert # pragma GCC system_header 22*4bdff4beSrobert #endif 23*4bdff4beSrobert 24*4bdff4beSrobert _LIBCPP_BEGIN_NAMESPACE_STD 25*4bdff4beSrobert 26*4bdff4beSrobert #if _LIBCPP_STD_VER > 17 27*4bdff4beSrobert 28*4bdff4beSrobert // [concept.common] 29*4bdff4beSrobert 30*4bdff4beSrobert template<class _Tp, class _Up> 31*4bdff4beSrobert concept common_with = 32*4bdff4beSrobert same_as<common_type_t<_Tp, _Up>, common_type_t<_Up, _Tp>> && 33*4bdff4beSrobert requires { 34*4bdff4beSrobert static_cast<common_type_t<_Tp, _Up>>(std::declval<_Tp>()); 35*4bdff4beSrobert static_cast<common_type_t<_Tp, _Up>>(std::declval<_Up>()); 36*4bdff4beSrobert } && 37*4bdff4beSrobert common_reference_with< 38*4bdff4beSrobert add_lvalue_reference_t<const _Tp>, 39*4bdff4beSrobert add_lvalue_reference_t<const _Up>> && 40*4bdff4beSrobert common_reference_with< 41*4bdff4beSrobert add_lvalue_reference_t<common_type_t<_Tp, _Up>>, 42*4bdff4beSrobert common_reference_t< 43*4bdff4beSrobert add_lvalue_reference_t<const _Tp>, 44*4bdff4beSrobert add_lvalue_reference_t<const _Up>>>; 45*4bdff4beSrobert 46*4bdff4beSrobert #endif // _LIBCPP_STD_VER > 17 47*4bdff4beSrobert 48*4bdff4beSrobert _LIBCPP_END_NAMESPACE_STD 49*4bdff4beSrobert 50*4bdff4beSrobert #endif // _LIBCPP___CONCEPTS_COMMON_WITH_H 51