Recebi muitos avisos do compilador para a biblioteca eigen, um exemplo sendo:
Warning C4819 The file contains a character that cannot be represented in the current code page (950). Save the file in Unicode format to prevent data loss
Algumas sugestões foram salvar novamente os arquivos em Unicode, mas isso não significa que eu "alterei" o código-fonte da biblioteca e ele reaparecerá após minha próxima atualização da biblioteca?
A mensagem de erro é enganosa porque o código-fonte do Eigen já está codificado em UTF-8. O problema é que o Visual Studio depende da BOM para detectar UTF. Usar a BOM para esse propósito não é oficialmente recomendado, e incluir a BOM em um arquivo codificado em UTF-8 não é uma prática comum no Linux, que é o principal alvo do Eigen3 (podemos argumentar sobre a sensatez disso, mas isso não vem ao caso). Se não encontrar uma BOM, o Visual Studio retorna à página de código do usuário atual.
Isso é agravado pelo fato de a Eigen3 ser uma biblioteca matemática que gosta de usar símbolos matemáticos em seus comentários e ter sido escrita por muitos programadores franceses com acentos em seus nomes. Seu código-fonte, portanto, usa símbolos fora do subconjunto ASCII. Isso faz com que o fallback falhe para alguns arquivos.
Solução alternativa: diga ao compilador do Visual Studio para tratar todos os arquivos de código-fonte como UTF-8 com o sinalizador de compilação
/source-charset:utf-8
. Opcionalmente, basta definir/utf-8
em vez disso para também definir o conjunto de caracteres de execução./source-charset:utf-8
Mais detalhes sobre os sinalizadores do compilador na documentação oficial:
/source-charset
/utf-8
É apenas uma solução alternativa, pois você só pode definir um conjunto de caracteres. Ao extrair vários projetos com várias codificações conflitantes, isso falhará. Nesse caso, não conheço nenhuma outra solução além de carregar os arquivos e salvá-los com uma BOM ou codificação compatível.