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