Skip to content
Snippets Groups Projects
Commit cca8ac1b authored by Marco Cecchetti's avatar Marco Cecchetti Committed by Christian Engwer
Browse files

[bugfix] fix bug #1457 - FieldVector::operator*=() called with an int is ambiguous

The bug affected operators: +=, -=, *=, /=. It has been fixed by using:
enable_if<is_convertible<ParamType, FieldVector::valueType>, ...>
parent cf4bf4d8
No related branches found
No related tags found
No related merge requests found
......@@ -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();
......
......@@ -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();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment