19 #ifndef LIBMESH_COMPARE_TYPES_H 20 #define LIBMESH_COMPARE_TYPES_H 22 #include "libmesh_config.h" 24 #ifdef LIBMESH_DEFAULT_QUADRUPLE_PRECISION 30 #include <type_traits> 36 #ifdef LIBMESH_ENABLE_DEPRECATED 38 template <
bool B,
class T =
void>
46 #endif // LIBMESH_ENABLE_DEPRECATED 52 template <
typename T1,
typename T2>
54 static const bool value =
false;
66 static const bool value =
false;
69 #define ScalarTraits_true(type) \ 71 struct ScalarTraits<type> { static const bool value = true; } 72 #define RealTraits_true(type) \ 74 struct RealTraits<type> { static const bool value = true; } 87 #ifdef LIBMESH_DEFAULT_QUADRUPLE_PRECISION 98 static const bool value =
false;
101 #define RealTraits_true(type) \ 103 struct RealTraits<type> { static const bool value = true; } 116 template<
typename S,
typename T>
140 #define CompareTypes_super(a,b,super) \ 142 struct CompareTypes<a, b> { \ 143 typedef super supertype; \ 146 #define SUPERTYPE(mysub,mysuper) \ 147 CompareTypes_super(mysub, mysuper, mysuper); \ 148 CompareTypes_super(mysuper, mysub, mysuper); \ 149 CompareTypes_super(std::complex<mysub>, mysuper, std::complex<mysuper>); \ 150 CompareTypes_super(mysuper, std::complex<mysub>, std::complex<mysuper>); \ 151 CompareTypes_super(mysub, std::complex<mysuper>, std::complex<mysuper>); \ 152 CompareTypes_super(std::complex<mysuper>, mysub, std::complex<mysuper>); \ 153 CompareTypes_super(std::complex<mysub>, std::complex<mysuper>, std::complex<mysuper>); \ 154 CompareTypes_super(std::complex<mysuper>, std::complex<mysub>, std::complex<mysuper>) 184 #ifdef LIBMESH_DEFAULT_QUADRUPLE_PRECISION 196 #undef CompareTypes_super 219 #ifdef LIBMESH_HAVE_METAPHYSICL 220 #define LIBMESH_DUAL_NUMBER_COMPARE_TYPES 222 #include "metaphysicl/dualnumber_forward.h" 226 template <
typename T,
typename T2,
typename D,
bool asd>
229 typedef MetaPhysicL::DualNumber<typename CompareTypes<T, T2>::supertype,
230 typename D::template rebind<typename CompareTypes<T, T2>::supertype>::other,
234 template <
typename T,
typename D,
typename T2,
bool asd>
237 typedef MetaPhysicL::DualNumber<typename CompareTypes<T, T2>::supertype,
238 typename D::template rebind<typename CompareTypes<T, T2>::supertype>::other,
242 template <
typename T,
typename D,
typename T2,
typename D2,
bool asd>
245 typedef MetaPhysicL::DualNumber<typename CompareTypes<T, T2>::supertype,
246 typename D::template rebind<typename CompareTypes<T, T2>::supertype>::other,
250 template <
typename T,
typename D,
bool asd>
255 template <
typename T,
typename T2,
bool asd>
258 typedef MetaPhysicL::DualNumber<typename CompareTypes<T, T2>::supertype,
263 template <
typename T,
typename T2,
bool asd>
266 typedef MetaPhysicL::DualNumber<typename CompareTypes<T, T2>::supertype,
271 template <
typename T,
typename T2,
bool asd>
274 typedef MetaPhysicL::DualNumber<typename CompareTypes<T, T2>::supertype,
279 template <
typename T,
typename D,
bool asd>
284 template <
typename T,
typename D,
bool asd>
292 #endif // LIBMESH_HAVE_METAPHYSICL 294 #endif // LIBMESH_COMPARE_TYPES_H
std::complex< T > supertype
std::complex< T > supertype
The libMesh namespace provides an interface to certain functionality in the library.
SUPERTYPE(unsigned char, short)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real