// -*-c++-*- // vim: set ft=cpp: /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #pragma once #include #include namespace cm { template < typename T, typename O, cm::enable_if_t().get())>::value, int> = 0> T& static_reference_cast(O& item) { return *(static_cast(item.get())); } template < typename T, typename O, cm::enable_if_t().get())>::value, int> = 0> T& dynamic_reference_cast(O& item) { auto p = dynamic_cast(item.get()); if (p == nullptr) { throw std::bad_cast(); } return *p; } } // namespace cm