Consider the following:
Quit[]
Thread[g[{1, 2}, 3]]
(* {g[1, 3], g[2, 3]} *)
Thread[g[{}, 3]]
(* {} *)
This works similarly if instead $g$ takes only one parameter. Now look at the following:
Quit[]
f1[x_] := x+3;
f2[x_,y_] := x + y + {1,0};
Thread[f1[{1,2}]]
(* {4, 5} *)
Thread[f1[{}]]
(* {} *)
Thread[f2[{1,2},5]]
(* {7, 7} *)
Thread[f2[{},5]]
(* Thread::tdlen: Objects of unequal length in {}+5+{1,0} cannot be combined. *)
(* Thread::tdlen: Objects of unequal length in 5+{}+{1,0} cannot be combined. *)
(* 5 + {} + {1, 0} *)
All of these make sense except for the last one. If threading works on $f1$ with an empty list, why shouldn't it work on $f2$ with an empty list?
(BTW, there was no tag for threading.)
f2
so that it can not accept a list as an argument , egf2[x_?AtomQ, y_] := x + y + {1, 0}
$\endgroup$