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