Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <type_traits> 7 : 8 : #include "Utilities/TypeTraits/CreateHasTypeAlias.hpp" 9 : 10 : namespace domain::BoundaryConditions { 11 : CREATE_HAS_TYPE_ALIAS(boundary_conditions_base) 12 : CREATE_HAS_TYPE_ALIAS_V(boundary_conditions_base) 13 : 14 : namespace detail { 15 : // used as passive error message 16 : struct TheSystemHasNoBoundaryConditionsBaseTypeAlias {}; 17 : 18 : template <typename T, typename = std::void_t<>> 19 : struct get_boundary_conditions_base { 20 : using type = TheSystemHasNoBoundaryConditionsBaseTypeAlias; 21 : }; 22 : 23 : template <typename T> 24 : struct get_boundary_conditions_base< 25 : T, std::void_t<typename T::boundary_conditions_base>> { 26 : using type = typename T::boundary_conditions_base; 27 : }; 28 : } // namespace detail 29 : 30 : /// Returns `T::boundary_condition_base` or a placeholder class. 31 : template <typename T> 32 1 : using get_boundary_conditions_base = 33 : typename detail::get_boundary_conditions_base<T>::type; 34 : } // namespace domain::BoundaryConditions