Advertencia C28303

Para el parámetro reference-parameter <de C++ parameter_name>, se encontró un operador ambiguo _Deref_ en "annotation".

Esta advertencia es similar a la advertencia C28302 y se notifica cuando se usa un nivel adicional de _Deref_ en un parámetro.

SAL2 no requiere el uso de un nivel adicional de cuando se trabaja con parámetros de _Deref_ referencia. Esta anotación en particular es ambigua en cuanto al nivel de desreferencia que se pretende anotar. Puede ser necesario usar _At_ para hacer referencia al objeto específico que se va a anotar.

Ejemplo

El código siguiente genera esta advertencia porque el uso de __deref_out_ecount(n) es ambiguo:

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

La anotación anterior podría interpretarse como:

  • una referencia a una matriz (de n) punteros a valores enteros (interpretación SAL1)

  • una referencia a un puntero a una matriz (de n) valores enteros (interpretación SAL2)

    Cualquiera de los siguientes cambios puede corregir esta advertencia:

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