19#ifndef LIBMESH_COMPARE_TYPES_H
20#define LIBMESH_COMPARE_TYPES_H
22#include "libmesh_config.h"
24#ifdef LIBMESH_DEFAULT_QUADRUPLE_PRECISION
36#ifdef LIBMESH_ENABLE_DEPRECATED
38template <
bool B,
class T =
void>
52template <
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; }
116template<
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"
226template <
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,
234template <
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,
242template <
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,
250template <
typename T,
typename D,
bool asd>
255template <
typename T,
typename T2,
bool asd>
258 typedef MetaPhysicL::DualNumber<typename CompareTypes<T, T2>::supertype,
263template <
typename T,
typename T2,
bool asd>
266 typedef MetaPhysicL::DualNumber<typename CompareTypes<T, T2>::supertype,
271template <
typename T,
typename T2,
bool asd>
274 typedef MetaPhysicL::DualNumber<typename CompareTypes<T, T2>::supertype,
279template <
typename T,
typename D,
bool asd>
284template <
typename T,
typename D,
bool asd>
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
std::complex< T > supertype
std::complex< T > supertype