//===- llvm/Support/Errc.h - Defines the llvm::errc enum --------*- 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 // //===----------------------------------------------------------------------===// // // While std::error_code works OK on all platforms we use, there are some // some problems with std::errc that can be avoided by using our own // enumeration: // // * std::errc is a namespace in some implementations. That means that ADL // doesn't work and it is sometimes necessary to write std::make_error_code // or in templates: // using std::make_error_code; // make_error_code(...); // // with this enum it is safe to always just use make_error_code. // // * Some implementations define fewer names than others. This header has // the intersection of all the ones we support. // // * std::errc is just marked with is_error_condition_enum. This means that // common patterns like AnErrorCode == errc::no_such_file_or_directory take // 4 virtual calls instead of two comparisons. //===----------------------------------------------------------------------===// #ifndef LLVM_SUPPORT_ERRC_H #define LLVM_SUPPORT_ERRC_H #include <system_error> namespace llvm { enum class errc { … }; inline std::error_code make_error_code(errc E) { … } } namespace std { template <> struct is_error_code_enum<llvm::errc> : std::true_type { … }; } #endif