xref: /llvm-project/flang/include/flang/Common/variant.h (revision 7860f970666f46184ad740db48a69882d62e64fc)
1*7860f970SSlava Zakharin //===-- include/flang/Common/variant.h --------------------------*- C++ -*-===//
2*7860f970SSlava Zakharin //
3*7860f970SSlava Zakharin // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*7860f970SSlava Zakharin // See https://llvm.org/LICENSE.txt for license information.
5*7860f970SSlava Zakharin // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*7860f970SSlava Zakharin //
7*7860f970SSlava Zakharin //===----------------------------------------------------------------------===//
8*7860f970SSlava Zakharin 
9*7860f970SSlava Zakharin // A single way to expose C++ variant class in files that can be used
10*7860f970SSlava Zakharin // in F18 runtime build. With inclusion of this file std::variant
11*7860f970SSlava Zakharin // and the related names become available, though, they may correspond
12*7860f970SSlava Zakharin // to alternative definitions (e.g. from cuda::std namespace).
13*7860f970SSlava Zakharin 
14*7860f970SSlava Zakharin #ifndef FORTRAN_COMMON_VARIANT_H
15*7860f970SSlava Zakharin #define FORTRAN_COMMON_VARIANT_H
16*7860f970SSlava Zakharin 
17*7860f970SSlava Zakharin #if RT_USE_LIBCUDACXX
18*7860f970SSlava Zakharin #include <cuda/std/variant>
19*7860f970SSlava Zakharin namespace std {
20*7860f970SSlava Zakharin using cuda::std::get;
21*7860f970SSlava Zakharin using cuda::std::monostate;
22*7860f970SSlava Zakharin using cuda::std::variant;
23*7860f970SSlava Zakharin using cuda::std::variant_size_v;
24*7860f970SSlava Zakharin using cuda::std::visit;
25*7860f970SSlava Zakharin } // namespace std
26*7860f970SSlava Zakharin #else // !RT_USE_LIBCUDACXX
27*7860f970SSlava Zakharin #include <variant>
28*7860f970SSlava Zakharin #endif // !RT_USE_LIBCUDACXX
29*7860f970SSlava Zakharin 
30*7860f970SSlava Zakharin #endif // FORTRAN_COMMON_VARIANT_H
31