// Build don't link:

template<unsigned int n> struct PartialDotProduct {
    template<class T>
    static T Expand(T* a, T* b) { return T(); }
};

const int N = 10;

template<class In1, class In2>
void
dot(In1 f1, In2 f2)
{
  PartialDotProduct<N>::Expand(f1, f2);

}

int main()
{
  double a[N], b[N];
  
  dot(&a[0], &b[0]);
}
