As a workaround, you can overload foo with the remote version:
void foo(int32_t x) = delete;
void foo(int64_t x) {}
As a more general solution, you can create a remote function template and then specialize it for int64_t (thanks to @Someprogrammerdude):
template<typename T>
void foo(T) = delete;
template<>
void foo(int64_t x) {}
, clang 3.8, clang 3.9 gcc 6.2.