IsEnumCase.h (690B)
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #ifndef MOZILLA_DOM_ISENUMCASE_H 7 #define MOZILLA_DOM_ISENUMCASE_H 8 9 #include <optional> 10 #include <type_traits> 11 12 namespace mozilla { 13 14 template <class T> 15 bool IsEnumCase(T); 16 17 template <class E> 18 inline constexpr std::optional<E> AsEnumCase( 19 const std::underlying_type_t<E> raw) { 20 const auto ret = static_cast<E>(raw); 21 if (!IsEnumCase(ret)) return {}; 22 return ret; 23 } 24 25 } // namespace mozilla 26 27 #endif