//===----------------------------------------------------------------------===// // // Part of libcu++, the C++ Standard Library for your entire system, // under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. // //===----------------------------------------------------------------------===// #ifndef _LIBCUDACXX___COMPLEX_TUPLE_H #define _LIBCUDACXX___COMPLEX_TUPLE_H #include #if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC) # pragma GCC system_header #elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_CLANG) # pragma clang system_header #elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_MSVC) # pragma system_header #endif // no system header #include #include #include #include #include #include #include _LIBCUDACXX_BEGIN_NAMESPACE_STD template struct tuple_size> : _CUDA_VSTD::integral_constant {}; template struct tuple_element<_Index, complex<_Tp>> : _CUDA_VSTD::enable_if < _Index<2, _Tp> {}; template struct __get_complex_impl { template [[nodiscard]] static _CCCL_API constexpr _Tp& get(complex<_Tp>& __z) noexcept { return (_Index == 0) ? __z.__re_ : __z.__im_; } template [[nodiscard]] static _CCCL_API constexpr _Tp&& get(complex<_Tp>&& __z) noexcept { return _CUDA_VSTD::move((_Index == 0) ? __z.__re_ : __z.__im_); } template [[nodiscard]] static _CCCL_API constexpr const _Tp& get(const complex<_Tp>& __z) noexcept { return (_Index == 0) ? __z.__re_ : __z.__im_; } template [[nodiscard]] static _CCCL_API constexpr const _Tp&& get(const complex<_Tp>&& __z) noexcept { return _CUDA_VSTD::move((_Index == 0) ? __z.__re_ : __z.__im_); } }; template [[nodiscard]] _CCCL_API constexpr _Tp& get(complex<_Tp>& __z) noexcept { static_assert(_Index < 2, "Index value is out of range"); return __get_complex_impl<_Tp>::template get<_Index>(__z); } template [[nodiscard]] _CCCL_API constexpr _Tp&& get(complex<_Tp>&& __z) noexcept { static_assert(_Index < 2, "Index value is out of range"); return __get_complex_impl<_Tp>::template get<_Index>(_CUDA_VSTD::move(__z)); } template [[nodiscard]] _CCCL_API constexpr const _Tp& get(const complex<_Tp>& __z) noexcept { static_assert(_Index < 2, "Index value is out of range"); return __get_complex_impl<_Tp>::template get<_Index>(__z); } template [[nodiscard]] _CCCL_API constexpr const _Tp&& get(const complex<_Tp>&& __z) noexcept { static_assert(_Index < 2, "Index value is out of range"); return __get_complex_impl<_Tp>::template get<_Index>(_CUDA_VSTD::move(__z)); } _LIBCUDACXX_END_NAMESPACE_STD #include #endif // _LIBCUDACXX___COMPLEX_TUPLE_H