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
|