| 123456789101112131415161718192021222324252627 |
- //
- // traits.hpp
- // opaque_typedef
- //
- // Created by Sam Jaffe on 12/1/23.
- // Copyright © 2023 Sam Jaffe. All rights reserved.
- //
- #pragma once
- #include <type_traits>
- #define REQUIRES(...) typename = std::enable_if_t<__VA_ARGS__>
- namespace types {
- template <typename Base, typename = void> struct underlying_type {
- using type = Base const &;
- };
- template <typename Base>
- struct underlying_type<Base, std::void_t<typename Base::underlying_type>> {
- using type = typename Base::underlying_type;
- };
- template <typename Base>
- using underlying_type_t = typename underlying_type<Base>::type;
- }
|