LIEF: Library to Instrument Executable Formats Version 1.0.0
Loading...
Searching...
No Matches
defines.h
Go to the documentation of this file.
1/*
2 * Frozen
3 * Copyright 2016 QuarksLab
4 *
5 * Licensed to the Apache Software Foundation (ASF) under one
6 * or more contributor license agreements. See the NOTICE file
7 * distributed with this work for additional information
8 * regarding copyright ownership. The ASF licenses this file
9 * to you under the Apache License, Version 2.0 (the
10 * "License"); you may not use this file except in compliance
11 * with the License. You may obtain a copy of the License at
12 *
13 * http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing,
16 * software distributed under the License is distributed on an
17 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
18 * KIND, either express or implied. See the License for the
19 * specific language governing permissions and limitations
20 * under the License.
21 */
22
23#ifndef FROZEN_LETITGO_DEFINES_H
24#define FROZEN_LETITGO_DEFINES_H
25
26#if defined(_MSVC_LANG) && !(defined(__EDG__) && defined(__clang__)) // TRANSITION, VSO#273681
27 #define FROZEN_LETITGO_IS_MSVC
28#endif
29
30// Code taken from https://stackoverflow.com/questions/43639122/which-values-can-msvc-lang-have
31#if defined(FROZEN_LETITGO_IS_MSVC)
32 #if _MSVC_LANG > 201402
33 #define FROZEN_LETITGO_HAS_CXX17 1
34 #else /* _MSVC_LANG > 201402 */
35 #define FROZEN_LETITGO_HAS_CXX17 0
36 #endif /* _MSVC_LANG > 201402 */
37#else /* _MSVC_LANG etc. */
38 #if __cplusplus > 201402
39 #define FROZEN_LETITGO_HAS_CXX17 1
40 #else /* __cplusplus > 201402 */
41 #define FROZEN_LETITGO_HAS_CXX17 0
42 #endif /* __cplusplus > 201402 */
43#endif /* _MSVC_LANG etc. */
44// End if taken code
45
46#if FROZEN_LETITGO_HAS_CXX17 == 1 && defined(FROZEN_LETITGO_IS_MSVC)
47 #define FROZEN_LETITGO_HAS_STRING_VIEW // We assume Visual Studio always has string_view in C++17
48#else
49 #if FROZEN_LETITGO_HAS_CXX17 == 1 && __has_include(<string_view>)
50 #define FROZEN_LETITGO_HAS_STRING_VIEW
51 #endif
52#endif
53
54#ifdef __cpp_char8_t
55 #define FROZEN_LETITGO_HAS_CHAR8T
56#endif
57
58#if defined(__cpp_deduction_guides) && __cpp_deduction_guides >= 201703L
59 #define FROZEN_LETITGO_HAS_DEDUCTION_GUIDES
60#endif
61
62#if defined(__cpp_lib_constexpr_string) && __cpp_lib_constexpr_string >= 201907L
63 #define FROZEN_LETITGO_HAS_CONSTEXPR_STRING
64#endif
65
66#endif // FROZEN_LETITGO_DEFINES_H