69 lines
2.5 KiB
C++
69 lines
2.5 KiB
C++
//===--- ExceptionSpecificationType.h ---------------------------*- 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
|
|
/// Defines the ExceptionSpecificationType enumeration and various
|
|
/// utility functions.
|
|
///
|
|
//===----------------------------------------------------------------------===//
|
|
#ifndef LLVM_CLANG_BASIC_EXCEPTIONSPECIFICATIONTYPE_H
|
|
#define LLVM_CLANG_BASIC_EXCEPTIONSPECIFICATIONTYPE_H
|
|
|
|
namespace clang {
|
|
|
|
/// The various types of exception specifications that exist in C++11.
|
|
enum ExceptionSpecificationType {
|
|
EST_None, ///< no exception specification
|
|
EST_DynamicNone, ///< throw()
|
|
EST_Dynamic, ///< throw(T1, T2)
|
|
EST_MSAny, ///< Microsoft throw(...) extension
|
|
EST_NoThrow, ///< Microsoft __declspec(nothrow) extension
|
|
EST_BasicNoexcept, ///< noexcept
|
|
EST_DependentNoexcept,///< noexcept(expression), value-dependent
|
|
EST_NoexceptFalse, ///< noexcept(expression), evals to 'false'
|
|
EST_NoexceptTrue, ///< noexcept(expression), evals to 'true'
|
|
EST_Unevaluated, ///< not evaluated yet, for special member function
|
|
EST_Uninstantiated, ///< not instantiated yet
|
|
EST_Unparsed ///< not parsed yet
|
|
};
|
|
|
|
inline bool isDynamicExceptionSpec(ExceptionSpecificationType ESpecType) {
|
|
return ESpecType >= EST_DynamicNone && ESpecType <= EST_MSAny;
|
|
}
|
|
|
|
inline bool isComputedNoexcept(ExceptionSpecificationType ESpecType) {
|
|
return ESpecType >= EST_DependentNoexcept &&
|
|
ESpecType <= EST_NoexceptTrue;
|
|
}
|
|
|
|
inline bool isNoexceptExceptionSpec(ExceptionSpecificationType ESpecType) {
|
|
return ESpecType == EST_BasicNoexcept || ESpecType == EST_NoThrow ||
|
|
isComputedNoexcept(ESpecType);
|
|
}
|
|
|
|
inline bool isUnresolvedExceptionSpec(ExceptionSpecificationType ESpecType) {
|
|
return ESpecType == EST_Unevaluated || ESpecType == EST_Uninstantiated;
|
|
}
|
|
|
|
/// Possible results from evaluation of a noexcept expression.
|
|
enum CanThrowResult {
|
|
CT_Cannot,
|
|
CT_Dependent,
|
|
CT_Can
|
|
};
|
|
|
|
inline CanThrowResult mergeCanThrow(CanThrowResult CT1, CanThrowResult CT2) {
|
|
// CanThrowResult constants are ordered so that the maximum is the correct
|
|
// merge result.
|
|
return CT1 > CT2 ? CT1 : CT2;
|
|
}
|
|
|
|
} // end namespace clang
|
|
|
|
#endif // LLVM_CLANG_BASIC_EXCEPTIONSPECIFICATIONTYPE_H
|