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