19 #ifndef LIBMESH_COMPARE_TYPES_H 20 #define LIBMESH_COMPARE_TYPES_H 25 #include "libmesh_config.h" 27 #ifdef LIBMESH_DEFAULT_QUADRUPLE_PRECISION 37 template <
bool B,
class T =
void>
50 template <
typename T1,
typename T2>
52 static const bool value =
false;
64 static const bool value =
false;
67 #define ScalarTraits_true(type) \ 69 struct ScalarTraits<type> { static const bool value = true; } 70 #define RealTraits_true(type) \ 72 struct RealTraits<type> { static const bool value = true; } 85 #ifdef LIBMESH_DEFAULT_QUADRUPLE_PRECISION 96 static const bool value =
false;
99 #define RealTraits_true(type) \ 101 struct RealTraits<type> { static const bool value = true; } 114 template<
typename S,
typename T>
138 #define CompareTypes_super(a,b,super) \ 140 struct CompareTypes<a, b> { \ 141 typedef super supertype; \ 144 #define SUPERTYPE(mysub,mysuper) \ 145 CompareTypes_super(mysub, mysuper, mysuper); \ 146 CompareTypes_super(mysuper, mysub, mysuper); \ 147 CompareTypes_super(std::complex<mysub>, mysuper, std::complex<mysuper>); \ 148 CompareTypes_super(mysuper, std::complex<mysub>, std::complex<mysuper>); \ 149 CompareTypes_super(mysub, std::complex<mysuper>, std::complex<mysuper>); \ 150 CompareTypes_super(std::complex<mysuper>, mysub, std::complex<mysuper>); \ 151 CompareTypes_super(std::complex<mysub>, std::complex<mysuper>, std::complex<mysuper>); \ 152 CompareTypes_super(std::complex<mysuper>, std::complex<mysub>, std::complex<mysuper>) 182 #ifdef LIBMESH_DEFAULT_QUADRUPLE_PRECISION 194 #undef CompareTypes_super 217 #ifdef LIBMESH_HAVE_METAPHYSICL 218 #define LIBMESH_DUAL_NUMBER_COMPARE_TYPES 220 #include "metaphysicl/dualnumber_forward.h" 224 template <
typename T,
typename T2,
typename D,
bool asd>
227 typedef MetaPhysicL::DualNumber<typename CompareTypes<T, T2>::supertype,
228 typename D::template rebind<typename CompareTypes<T, T2>::supertype>::other,
232 template <
typename T,
typename D,
typename T2,
bool asd>
235 typedef MetaPhysicL::DualNumber<typename CompareTypes<T, T2>::supertype,
236 typename D::template rebind<typename CompareTypes<T, T2>::supertype>::other,
240 template <
typename T,
typename D,
typename T2,
typename D2,
bool asd>
243 typedef MetaPhysicL::DualNumber<typename CompareTypes<T, T2>::supertype,
244 typename D::template rebind<typename CompareTypes<T, T2>::supertype>::other,
248 template <
typename T,
typename D,
bool asd>
253 template <
typename T,
typename T2,
bool asd>
256 typedef MetaPhysicL::DualNumber<typename CompareTypes<T, T2>::supertype,
261 template <
typename T,
typename T2,
bool asd>
264 typedef MetaPhysicL::DualNumber<typename CompareTypes<T, T2>::supertype,
269 template <
typename T,
typename T2,
bool asd>
272 typedef MetaPhysicL::DualNumber<typename CompareTypes<T, T2>::supertype,
277 template <
typename T,
typename D,
bool asd>
282 template <
typename T,
typename D,
bool asd>
290 #endif // LIBMESH_HAVE_METAPHYSICL 292 #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