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)