diff --git a/dune/common/densevector.hh b/dune/common/densevector.hh index 7a30b277e8d6becb70855cfce3e29fb03962aadb..7ef0ec02a2c126e72cbc9694e2e25baaee38c191 100644 --- a/dune/common/densevector.hh +++ b/dune/common/densevector.hh @@ -4,6 +4,7 @@ #define DUNE_DENSEVECTOR_HH #include <limits> +#include <type_traits> #include "genericiterator.hh" #include "ftraits.hh" @@ -406,32 +407,56 @@ namespace Dune { } //! vector space add scalar to all comps - derived_type& operator+= (const value_type& k) - { + template <typename ValueType> + typename std::enable_if< + std::is_convertible<ValueType, value_type>::value, + derived_type + >::type& + operator+= (const ValueType& kk) + { + const value_type& k = kk; for (size_type i=0; i<size(); i++) (*this)[i] += k; return asImp(); } //! vector space subtract scalar from all comps - derived_type& operator-= (const value_type& k) - { + template <typename ValueType> + typename std::enable_if< + std::is_convertible<ValueType, value_type>::value, + derived_type + >::type& + operator-= (const ValueType& kk) + { + const value_type& k = kk; for (size_type i=0; i<size(); i++) (*this)[i] -= k; return asImp(); } //! vector space multiplication with scalar - derived_type& operator*= (const value_type& k) - { + template <typename ValueType> + typename std::enable_if< + std::is_convertible<ValueType, value_type>::value, + derived_type + >::type& + operator*= (const ValueType& kk) + { + const value_type& k = kk; for (size_type i=0; i<size(); i++) (*this)[i] *= k; return asImp(); } //! vector space division by scalar - derived_type& operator/= (const value_type& k) - { + template <typename ValueType> + typename std::enable_if< + std::is_convertible<ValueType, value_type>::value, + derived_type + >::type& + operator/= (const ValueType& kk) + { + const value_type& k = kk; for (size_type i=0; i<size(); i++) (*this)[i] /= k; return asImp(); diff --git a/dune/common/test/fvectortest.cc b/dune/common/test/fvectortest.cc index e182145b63adbeff81a55570fe8a3794ad29a4e8..4a323dfdda8a3dee4266af2858a5ed5e9cda5799 100644 --- a/dune/common/test/fvectortest.cc +++ b/dune/common/test/fvectortest.cc @@ -366,6 +366,8 @@ int main() FieldVectorTest<int, 3>(); FieldVectorTest<float, 3>(); FieldVectorTest<double, 3>(); + FieldVectorTest<int, 1>(); + FieldVectorTest<double, 1>(); test_nan(); test_infinity_norms();