Aviso C6392
Essa expressão grava o valor do ponteiro no fluxo. Se isso for intencional, adicione uma conversão explícita a 'void *'
A regra foi adicionada no Visual Studio 2022 17.8.
Comentários
O C++ dá suporte a fluxos de caracteres largos, como std::wostringstream
, e fluxos de caracteres não inteiros, como std::ostringstream
. Tentar imprimir uma cadeia de caracteres larga em um fluxo não inteiro chama a sobrecarga void*
de operator<<
. Essa sobrecarga imprime o endereço da cadeia de caracteres larga em vez do valor.
Nome de análise de código: STREAM_OUTPUT_VOID_PTR
Exemplo
O seguinte snippet de código imprime o valor do ponteiro para a saída padrão em vez da cadeia de caracteres "Pear"
:
#include <iostream>
int main() {
std::cout << L"Pear\n"; // Warning: C6392
}
Há várias maneiras de corrigir esse erro. Se a impressão do valor do ponteiro não for intencional, use uma cadeia de caracteres não larga:
#include <iostream>
int main() {
std::cout << "Pear\n"; // No warning.
}
Como alternativa, use um fluxo largo:
#include <iostream>
int main() {
std::wcout << L"Pear\n"; // No warning.
}
Se o comportamento for intencional, torne a intenção explícita e silencie o aviso usando uma conversão explícita:
#include <iostream>
int main() {
std::cout << static_cast<void*>(L"Pear\n"); // No warning.
}