Si scopre che avevo salvato il file sorgente C++ come file con codifica Unicode UTF-16, completo di byte BOM (Unicode Byte Order Mark) all'inizio del file. Il file è stato salvato come UTF-16 su un sistema Windows, impegnato in un sistema di controllo della versione, quindi estratto su Linux. gcc supporta Unicode codificato come UTF-8, ma non Unicode codificato come UTF-16.
La soluzione era riconvertire il file sorgente in una codifica standard, non Unicode.