#pragma once #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-parameter" #endif //===- STLForwardCompat.h - Library features from future STLs ------C++ -*-===// // // Part of the LLVM Project, 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 // //===----------------------------------------------------------------------===// /// /// \file /// This file contains library features backported from future STL versions. /// /// These should be replaced with their STL counterparts as the C++ version LLVM /// is compiled with is updated. /// //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_STLFORWARDCOMPAT_H #define LLVM_ADT_STLFORWARDCOMPAT_H #include namespace llvm { //===----------------------------------------------------------------------===// // Features from C++17 //===----------------------------------------------------------------------===// template struct negation // NOLINT(readability-identifier-naming) : std::integral_constant {}; template struct conjunction // NOLINT(readability-identifier-naming) : std::true_type {}; template struct conjunction : B1 {}; template struct conjunction : std::conditional, B1>::type {}; template struct disjunction // NOLINT(readability-identifier-naming) : std::false_type {}; template struct disjunction : B1 {}; template struct disjunction : std::conditional>::type {}; struct in_place_t // NOLINT(readability-identifier-naming) { explicit in_place_t() = default; }; /// \warning This must not be odr-used, as it cannot be made \c inline in C++14. constexpr in_place_t in_place; // NOLINT(readability-identifier-naming) template struct in_place_type_t // NOLINT(readability-identifier-naming) { explicit in_place_type_t() = default; }; template struct in_place_index_t // NOLINT(readability-identifier-naming) { explicit in_place_index_t() = default; }; //===----------------------------------------------------------------------===// // Features from C++20 //===----------------------------------------------------------------------===// template struct remove_cvref // NOLINT(readability-identifier-naming) { using type = std::remove_cv_t>; }; template using remove_cvref_t // NOLINT(readability-identifier-naming) = typename llvm::remove_cvref::type; } // namespace llvm #endif // LLVM_ADT_STLFORWARDCOMPAT_H #ifdef __GNUC__ #pragma GCC diagnostic pop #endif