diff --git a/dune/fufem/utilities/adolcnamespaceinjections.hh b/dune/fufem/utilities/adolcnamespaceinjections.hh index 6b1437e64123ce199f3fe153a4cdcecb7b07a59b..1762ec831da662fd30eaf73683fd56fee90ee307 100644 --- a/dune/fufem/utilities/adolcnamespaceinjections.hh +++ b/dune/fufem/utilities/adolcnamespaceinjections.hh @@ -2,8 +2,10 @@ #define DUNE_FUFEM_UTILITIES_ADOLC_NAMESPACE_INJECTIONS_HH #include <limits> +#include <type_traits> #include <dune/common/promotiontraits.hh> +#include <dune/common/typetraits.hh> #ifdef HAVE_ADOLC #include <adolc/adouble.h> @@ -120,15 +122,20 @@ namespace std }; } -/* Specializations of the PromotionTraits class from dune-common for the adouble type. - * This is needed, e.g., to be able to use the FieldVector implementation of dot products - * between a FieldVector<double> and a FieldVector<adouble>. The standard C++ return type - * deduction mechanism doesn't help here, because the product of a double and an adouble - * is actually a proxy class called 'adub', which is not to be used outside of the ADOL-C - * library. - */ namespace Dune { + template<> + struct IsNumber<adouble> + : std::true_type + {}; + + /* Specializations of the PromotionTraits class from dune-common for the adouble type. + * This is needed, e.g., to be able to use the FieldVector implementation of dot products + * between a FieldVector<double> and a FieldVector<adouble>. The standard C++ return type + * deduction mechanism doesn't help here, because the product of a double and an adouble + * is actually a proxy class called 'adub', which is not to be used outside of the ADOL-C + * library. + */ template <> struct PromotionTraits<double,adouble> {