Keeps track of the current error variable at compile time,
instead of using a pointer to the error variable at runtime.
Employs a trick with an unused type parameter to ensure that
invocations of the bindFailed() macro are expanded after
captureBindError() is expanded.