It is possible to overload macros, except for predefined macros. An overloaded macro has more than one definition, each with a different number of arguments.

The feature was added in Erlang 5.7.5/OTP R13B04.

A macro ?Func(Arg1,…,ArgN) with a (possibly empty) list of arguments results in an error message if there is at least one definition of Func with arguments, but none with N arguments.

Assuming these definitions:

-define(F0(), c).-define(F1(A), A).-define(C, m:f).

the following does not work:

f0() ->    ?F0. % No, an empty list of arguments expected. f1(A) ->    ?F1(A, A). % No, exactly one argument expected.

On the other hand,

f() ->    ?C().

is expanded to

f() ->    m:f().