C28303

Note

This article applies to Visual Studio 2015. If you're looking for the latest Visual Studio documentation, see Visual Studio documentation. We recommend upgrading to the latest version of Visual Studio. Download it here

warning C28303: For C++ reference-parameter <parameter_name>, an ambiguous _Deref_ operator was found on <annotation>.

This warning similar to warning C28302 and is reported when an extra level of _Deref_ is used on a parameter.

SAL2 does not require the use of an extra level of _Deref_ when dealing with reference parameters. This particular annotation is ambiguous as to which level of dereference is intended to be annotated. It may be necessary to use _At_ to reference the specific object to be annotated.

Example

The following code generates this warning because the use of __deref_out_ecount(n) is ambiguous:

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

The above annotation could be interpreted either as:

  • a reference to an array (of n) pointers to integers (SAL1 interpretation)

  • a reference to a pointer to an array (of n) integers (SAL2 interpretation)

    Either of the following can correct this warning:

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