// { dg-do run } #include <iterator> using namespace std; template<size_t n, size_t i> struct PartialDotProduct { template<class T> static T Expand(T* a, T* b) { return T(); } }; const int N = 10; template<class In1, class In2> typename iterator_traits<In1>::value_type dot(In1 f1, In2 f2) { return PartialDotProduct<N, 0>::Expand(f1, f2); // line 14 } int main() { double a[N], b[N]; double s = dot(&a[0], &b[0]); }