Files
TheRock/rocm-libraries/projects/rocthrust/thrust/detail/config/cpp_dialect.h
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

190 lines
7.7 KiB
C

/*
* Copyright 2020 NVIDIA Corporation
* Modifications Copyright (c) 2024-2025, Advanced Micro Devices, Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*! \file cpp_dialect.h
* \brief Detect the version of the C++ standard used by the compiler.
*/
#pragma once
#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 <thrust/detail/config/compiler.h> // IWYU pragma: export
// Deprecation warnings may be silenced by defining the following macros. These
// may be combined.
// - THRUST_IGNORE_DEPRECATED_CPP_DIALECT:
// Ignore all deprecated C++ dialects and outdated compilers.
// - THRUST_IGNORE_DEPRECATED_CPP_11:
// Ignore deprecation warnings when compiling with C++11. C++03 and outdated
// compilers will still issue warnings.
// - THRUST_IGNORE_DEPRECATED_CPP_14:
// Ignore deprecation warnings when compiling with C++14. C++03 and outdated
// compilers will still issue warnings.
// - THRUST_IGNORE_DEPRECATED_COMPILER
// Ignore deprecation warnings when using deprecated compilers. Compiling
// with C++03, C++11 and C++14 will still issue warnings.
// Define this to override the built-in detection.
#ifndef THRUST_CPP_DIALECT
// MSVC does not define __cplusplus correctly. _MSVC_LANG is used instead.
// This macro is only defined in MSVC 2015U3+.
# if defined(_MSVC_LANG) && !defined(__HIP__) // Do not replace with THRUST_HOST_COMPILER test (see above)
// MSVC2015 reports C++14 but lacks extended constexpr support. Treat as C++11.
# if THRUST_MSVC_VERSION < 1910 && _MSVC_LANG > 201103L /* MSVC < 2017 && CPP > 2011 */
# define THRUST_CPLUSPLUS 201103L /* Fix to 2011 */
# elif _MSVC_LANG <= 201103L
# define THRUST_CPLUSPLUS 201103L
# elif _MSVC_LANG > 202002L
# define THRUST_CPLUSPLUS 202302L
# else
# define THRUST_CPLUSPLUS _MSVC_LANG /* We'll trust this for now. */
# endif // MSVC 2015 C++14 fix
# else
# define THRUST_CPLUSPLUS __cplusplus
# endif
// Detect current dialect:
# if THRUST_CPLUSPLUS <= 199711L
# define THRUST_CPP_DIALECT 2003
# elif THRUST_CPLUSPLUS <= 201103L
# define THRUST_CPP_DIALECT 2011
# elif THRUST_CPLUSPLUS <= 201402L
# define THRUST_CPP_DIALECT 2014
# elif THRUST_CPLUSPLUS <= 201703L
# define THRUST_CPP_DIALECT 2017
# elif THRUST_CPLUSPLUS <= 202002L
# define THRUST_CPP_DIALECT 2020
# elif THRUST_CPLUSPLUS <= 202302L
# define THRUST_CPP_DIALECT 2023
# else
# define THRUST_CPP_DIALECT 2024 // current year, or date of c++2c ratification
# endif
# undef THRUST_CPLUSPLUS // cleanup
#endif // !THRUST_CPP_DIALECT
// Macros to suppress deprecation compiler warnings, from "deprecated.h"
// TODO: These macros start with `LIBCUDACXX`. So, when libhipcxx is
// available in this scope, we should remove these macros and use the ones
// from libhipcxx.
// Check for deprecation opt-outs
#if defined(LIBCUDACXX_IGNORE_DEPRECATED_CPP_DIALECT) || defined(CCCL_IGNORE_DEPRECATED_CPP_DIALECT) \
|| defined(CUB_IGNORE_DEPRECATED_CPP_DIALECT)
# if !defined(THRUST_IGNORE_DEPRECATED_CPP_DIALECT)
# define THRUST_IGNORE_DEPRECATED_CPP_DIALECT
# endif
#endif // suppress all dialect deprecation warnings
#if defined(LIBCUDACXX_IGNORE_DEPRECATED_CPP_14) || defined(CCCL_IGNORE_DEPRECATED_CPP_14) \
|| defined(CUB_IGNORE_DEPRECATED_CPP_14) || defined(THRUST_IGNORE_DEPRECATED_CPP_DIALECT)
# if !defined(THRUST_IGNORE_DEPRECATED_CPP_14)
# define THRUST_IGNORE_DEPRECATED_CPP_14
# endif
#endif // suppress all c++14 dialect deprecation warnings
#if defined(LIBCUDACXX_IGNORE_DEPRECATED_CPP_11) || defined(CCCL_IGNORE_DEPRECATED_CPP_11) \
|| defined(CUB_IGNORE_DEPRECATED_CPP_11) || defined(THRUST_IGNORE_DEPRECATED_CPP_DIALECT) \
|| defined(THRUST_IGNORE_DEPRECATED_CPP_14)
# if !defined(THRUST_IGNORE_DEPRECATED_CPP_11)
# define THRUST_IGNORE_DEPRECATED_CPP_11
# endif
#endif // suppress all c++11 dialect deprecation warnings
#if defined(LIBCUDACXX_IGNORE_DEPRECATED_COMPILER) || defined(CCCL_IGNORE_DEPRECATED_COMPILER) \
|| defined(CUB_IGNORE_DEPRECATED_COMPILER) || defined(THRUST_IGNORE_DEPRECATED_CPP_DIALECT) \
|| defined(THRUST_IGNORE_DEPRECATED_CPP_14) || defined(THRUST_IGNORE_DEPRECATED_CPP_11)
# if !defined(THRUST_IGNORE_DEPRECATED_COMPILER)
# define THRUST_IGNORE_DEPRECATED_COMPILER
# endif
#endif // suppress all compiler deprecation warnings
// Constexpr feature macros:
#if THRUST_CPP_DIALECT >= 2023
# define THRUST_CONSTEXPR_SINCE_CXX23 constexpr
#else
# define THRUST_CONSTEXPR_SINCE_CXX23
#endif
#if THRUST_CPP_DIALECT >= 2020
# define THRUST_CONSTEXPR_SINCE_CXX20 constexpr
#else
# define THRUST_CONSTEXPR_SINCE_CXX20
#endif
#if THRUST_CPP_DIALECT >= 2017
# define THRUST_CONSTEXPR_SINCE_CXX17 constexpr
#else
# define THRUST_CONSTEXPR_SINCE_CXX17
#endif
// Define THRUST_COMPILER_DEPRECATION macro:
#if THRUST_HOST_COMPILER == THRUST_HOST_COMPILER_MSVC || THRUST_HOST_COMPILER == THRUST_HOST_COMPILER_NVRTC
# define THRUST_COMP_DEPR_IMPL(msg) THRUST_PRAGMA(message(__FILE__ ":" THRUST_TO_STRING(__LINE__) ": warning: " #msg))
#else // clang / gcc:
# define THRUST_COMP_DEPR_IMPL(msg) THRUST_PRAGMA(GCC warning #msg)
#endif
// clang-format off
#define THRUST_COMPILER_DEPRECATION(REQ) \
THRUST_COMP_DEPR_IMPL(Thrust requires at least REQ. Define THRUST_IGNORE_DEPRECATED_COMPILER to suppress this message.)
#define THRUST_COMPILER_DEPRECATION_SOFT(REQ, CUR) \
THRUST_COMP_DEPR_IMPL( \
Thrust requires at least REQ. CUR is deprecated but still supported. CUR support will be removed in a \
future release. Define THRUST_IGNORE_DEPRECATED_CPP_DIALECT to suppress this message.)
// clang-format on
#ifndef THRUST_IGNORE_DEPRECATED_COMPILER
// Compiler checks:
# if THRUST_HOST_COMPILER == THRUST_HOST_COMPILER_GCC && THRUST_GCC_VERSION < 50000
THRUST_COMPILER_DEPRECATION(GCC 5.0);
# elif THRUST_HOST_COMPILER == THRUST_HOST_COMPILER_CLANG && THRUST_CLANG_VERSION < 70000
THRUST_COMPILER_DEPRECATION(Clang 7.0);
# elif THRUST_HOST_COMPILER == THRUST_HOST_COMPILER_MSVC && THRUST_MSVC_VERSION < 1910
// <2017. Hard upgrade message:
THRUST_COMPILER_DEPRECATION(MSVC 2019(19.20 / 16.0 / 14.20));
# elif THRUST_HOST_COMPILER == THRUST_HOST_COMPILER_MSVC && THRUST_MSVC_VERSION < 1920
// >=2017, <2019. Soft deprecation message:
THRUST_COMPILER_DEPRECATION_SOFT(MSVC 2019(19.20 / 16.0 / 14.20), MSVC 2017);
# endif
#endif // THRUST_IGNORE_DEPRECATED_COMPILER
#if THRUST_CPP_DIALECT < 2011
// <C++11. Hard upgrade message:
THRUST_COMPILER_DEPRECATION(C++ 17);
#elif THRUST_CPP_DIALECT == 2011 && !defined(THRUST_IGNORE_DEPRECATED_CPP_11)
// =C++11. Soft upgrade message:
THRUST_COMPILER_DEPRECATION_SOFT(C++ 17, C++ 11);
#elif THRUST_CPP_DIALECT == 2014 && !defined(THRUST_IGNORE_DEPRECATED_CPP_14)
// =C++14. Soft upgrade message:
THRUST_COMPILER_DEPRECATION_SOFT(C++ 17, C++ 14);
#endif // THRUST_CPP_DIALECT < 2011
#undef THRUST_COMPILER_DEPRECATION_SOFT
#undef THRUST_COMPILER_DEPRECATION
#undef THRUST_COMP_DEPR_IMPL
#undef THRUST_COMP_DEPR_IMPL0
#undef THRUST_COMP_DEPR_IMPL1