C6507
Aviso C6507: conflito de anotação: Nulo de propriedade em Deref = 0 em uma postagem a condição deve ser um subconjunto da propriedade Null a pré-condição
Este aviso indica que os valores conflitantes para a propriedade Null foram usados no pré e POST-condições no padrão cancelam o nível 0. Nesse caso o pré-condição especifica Null = No, e a condição de Post Especifica Null = Yes. Porque o parâmetro não é passado por referência não pode ser alterado; Portanto, a condição de Post não é possível usar Null = Yes.
Exemplo
O código a seguir gera este aviso porque Deref = 0 aplica-se o ponteiro e não o ponteiro de caractere:
// C
#include <CodeAnalysis\SourceAnnotations.h>
void f ([SA_Pre(Null=SA_No)] [SA_Post(Null=SA_Yes)] char *pc);
// C++
#include <CodeAnalysis\SourceAnnotations.h>
using namespace vc_attributes;
void f([Pre(Null=No)] [Post(Null=Yes)] char *pc);
Para corrigir esse aviso, modifique o atributo pré ou usar indireção dupla, se você deseja alterar o ponteiro que aponta para os caracteres, conforme mostrado no código a seguir:
// C
#include <CodeAnalysis\SourceAnnotations.h>
void f1 ([SA_Pre(Null=SA_Maybe)] [SA_Post(Null=SA_Yes)] char *pc);
// or
void f2 ([SA_Pre(Deref=1, Null=SA_No)] [SA_Post(Null=SA_Yes)] char **pc);
// C++
#include <CodeAnalysis\SourceAnnotations.h>
using namespace vc_attributes;
void f1([Pre(Null=Maybe)] [Post(Null=Yes)] char *pc);
// or
void f2 ([Pre(Deref=1, Null=No)] [Post(Null=Yes)] char **pc);
Ele é válido para especificar Pre (nulo = talvez) e Post (nulo = não). Isso é útil para funções que podem lançar exceções se o ponteiro for nulo: