diff --git a/dune/common/densevectorspan.hh b/dune/common/densevectorspan.hh index f4ad3df5bce1669fb5ec9bba528f2176ab540768..5f8a0386c759b5a2f752b264fd4e0f3de3159036 100644 --- a/dune/common/densevectorspan.hh +++ b/dune/common/densevectorspan.hh @@ -70,6 +70,10 @@ template <class K> DenseVectorSpan (K*, std::size_t) -> DenseVectorSpan<K>; +template <class K, std::size_t N> +DenseVectorSpan (K (&)[N]) + -> DenseVectorSpan<K,N>; + template <class S, std::enable_if_t<Dune::IsNumber<S>::value,int> = 0> DenseVectorSpan (S&) -> DenseVectorSpan<S,1>; diff --git a/dune/common/test/densevectorspantest.cc b/dune/common/test/densevectorspantest.cc index 3014eb2423989531ffac249cf9c56749b712f2c7..56a862c8955351c3e2bd4f35a46b219b4586c5b2 100644 --- a/dune/common/test/densevectorspantest.cc +++ b/dune/common/test/densevectorspantest.cc @@ -24,13 +24,26 @@ int main() std::vector<double> x(3); std::array<double,3> y{1.0,2.0,3.0}; - auto x_span = Dune::DenseVectorSpan(x); - auto y_span = Dune::DenseVectorSpan(y); + { + auto x_span = Dune::DenseVectorSpan(x); + auto y_span = Dune::DenseVectorSpan(y); + + matrix.mv(y_span,x_span); + test.check(x[0] == -3.0); + test.check(x[1] == 2.0); + test.check(x[2] == 9.0); + } - matrix.mv(y_span,x_span); - test.check(x[0] == -3.0); - test.check(x[1] == 2.0); - test.check(x[2] == 9.0); + { + [[maybe_unused]] auto x_span1 = Dune::DenseVectorSpan(x.data(), x.size()); + [[maybe_unused]] auto x_span2 = Dune::DenseVectorSpan<double,3>(x.data()); + } + + { + double data[3]{1.0,2.0,3.0}; + [[maybe_unused]] auto x_span1 = Dune::DenseVectorSpan(data, 3); + [[maybe_unused]] auto x_span2 = Dune::DenseVectorSpan(data); + } return test.exit(); }