1*5f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 2*5f757f3fSDimitry Andric // 3*5f757f3fSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*5f757f3fSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*5f757f3fSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*5f757f3fSDimitry Andric // 7*5f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 8*5f757f3fSDimitry Andric 9*5f757f3fSDimitry Andric #ifndef _LIBCPP___BIT_INVERT_IF_H 10*5f757f3fSDimitry Andric #define _LIBCPP___BIT_INVERT_IF_H 11*5f757f3fSDimitry Andric 12*5f757f3fSDimitry Andric #include <__concepts/arithmetic.h> 13*5f757f3fSDimitry Andric #include <__config> 14*5f757f3fSDimitry Andric 15*5f757f3fSDimitry Andric #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 16*5f757f3fSDimitry Andric # pragma GCC system_header 17*5f757f3fSDimitry Andric #endif 18*5f757f3fSDimitry Andric 19*5f757f3fSDimitry Andric _LIBCPP_BEGIN_NAMESPACE_STD 20*5f757f3fSDimitry Andric 21*5f757f3fSDimitry Andric template <bool _Invert, class _Tp> __invert_if(_Tp __v)22*5f757f3fSDimitry Andric_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _Tp __invert_if(_Tp __v) { 23*5f757f3fSDimitry Andric if (_Invert) 24*5f757f3fSDimitry Andric return ~__v; 25*5f757f3fSDimitry Andric return __v; 26*5f757f3fSDimitry Andric } 27*5f757f3fSDimitry Andric 28*5f757f3fSDimitry Andric _LIBCPP_END_NAMESPACE_STD 29*5f757f3fSDimitry Andric 30*5f757f3fSDimitry Andric #endif // _LIBCPP___BIT_INVERT_IF_H 31