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 : // note that std::is_convertible is used in the following type aliases as it 9 : // will not match private base classes (unlike std::is_base_of) and some 10 : // analytic data privately inherits from an analytic solution 11 : 12 : /// \ingroup AnalyticDataGroup 13 : /// \brief Empty base class for marking analytic data. 14 1 : struct MarkAsAnalyticData {}; 15 : 16 : /// \ingroup AnalyticDataGroup 17 : /// \brief Check if `T` is an analytic data 18 : template <typename T> 19 1 : using is_analytic_data = typename std::is_convertible<T*, MarkAsAnalyticData*>; 20 : 21 : /// \ingroup AnalyticDataGroup 22 : /// \brief `true` if `T` is an analytic data 23 : template <typename T> 24 1 : constexpr bool is_analytic_data_v = 25 : std::is_convertible_v<T*, MarkAsAnalyticData*>;