When browsing the source of the open source .NET Framework 4.7 I stumbled across the C++ header sal.h
and found a line of code saying [source_annotation_attribute( SA( Method ) )]
which seems to be similar to attributes and the AttributesUsage
class in C#.
Now I know that generally, there are no user defined attributes in C++ as there are in C#, and my first guess was that [source_annotation_attribute( SA( Method ) )]
is just a macro, but it is neither defined in sal.h
nor in any other headers, since sal.h
does not #include
any.
My next guess is that [source_annotation_attribute]
is actually built in the MSVC, just like for e.g. [[noreturn]]
attribute.
I would be glad if somebody could shed some light on what it actually is and if I can declare my own attributes similar to that, if it is not built into the compiler.
If you want to see for your self, the particular file is \Source\externalapis\legacy\vctools\vc12\inc\vc\sal.h
and the attribute occurs (among others) in line 1934
.
Here is an example on the usage in sal.h
:
[source_annotation_attribute( SA( Method ) )]
struct __M_
{
#ifdef __cplusplus // [
__M_();
#endif // ]
int __d_;
};
typedef struct __M_ __M_;
Many thanks in advance.