C28303

Aviso C28303: Para o parâmetro de referência de C++ <parameter_name>, um operador ambíguo _Deref_ foi encontrado em <anotação>.

Este aviso é semelhante ao aviso C28302 e é relatado quando um nível adicional de _Deref_ é usado em um parâmetro.

SAL2 não requer o uso de um nível adicional de _Deref_ ao manipular os parâmetros de referência.Esta anotação específica é ambígua em relação ao nível de desreferência que destina-se a ser anotado.Pode ser necessário usar _At_ para fazer referência ao objeto específico a ser anotado.

Exemplo

O seguinte código gera este aviso pois o uso de __deref_out_ecount(n) é ambíguo:

   void ref(__deref_out_ecount(n) int **&buff, int &n)

A anotação anterior pode ser interpretada tanto como:

  • uma referência a um vetor de ponteiros (tamanho n) para números inteiros (interpretação SAL1)

  • uma referência para um ponteiro para um vetor (tamanho n) de inteiros (interpretação SAL2)

Qualquer um dos seguintes pode corrigir esse aviso:

   void ref(_Out_writes_(n) int **&buff, int &n)
   // or
   _At_(*buff), _Out_writes(n)) void ref(int **&amp;buff, int &amp;n)