// Build don't link: template struct PartialDotProduct { template static T Expand(T* a, T* b) { return T(); } }; const int N = 10; template void dot(In1 f1, In2 f2) { PartialDotProduct::Expand(f1, f2); } int main() { double a[N], b[N]; dot(&a[0], &b[0]); }