Resultó que había guardado el archivo fuente de C++ como un archivo con codificación Unicode UTF-16, completo con bytes de marca de orden de bytes (BOM) Unicode al principio del archivo. El archivo se guardó como UTF-16 en un sistema Windows, se comprometió con un sistema de control de versiones y luego se desprotegió en Linux. gcc admite la codificación Unicode como UTF-8, pero no la codificación Unicode como UTF-16.
La solución fue volver a convertir el archivo de origen a una codificación estándar que no sea Unicode.