The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.

The latest version of this topic can be found at C28303.

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.

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)