Też nie wiedziałem, ale wystarczy umieć szukać :P
Z cplusplus.com:
The operator #, followed by a parameter name, is replaced by a string literal that contains the argument passed (as if enclosed between double quotes)
Więc ten kod (kopiuje od Tony D):
#define EXAMPLE(IDN) Example IDN{ #IDN }
EXAMPLE(object);
Utworzy obiekt klasy Example (o nazwie podanej w argumencie IDN) przekazując jednocześnie do konstruktora argument IDN zamknięty w cudzysłowach (czyli zostanie zinterpretowany jako string). Tzn. może nie tyle bezpośrednio do konstruktora, bo Tony B użył tu inicjalizacji poprzez liste inicjalizacyjną (tak sie chyba nazywa inicjalizacja klamrowa).