On 10/01/2014 22:07, Aaron Ballman wrote:
> The __has_attribute feature macro is fantastic in many respects, but
> is lacking the ability to determine whether a specific attribute
> syntax is available or not. Instead, it currently checks whether the
> attribute is known within the compilation target, and nothing more.
> This can cause problems because not all attributes are applied in the
> same way.
>> Consider dllexport as a contrived example:
>> #if __has_attribute(dllexport)
> void foo(void) __attribute__((dllexport));
> #endif
>> This code looks fine, but is actually broken because clang only
> supports __declspec(dllexport) and not __attribute__((dllexport)), and
> __declspec must precede the declaration.
>> The attached patch implements new syntax for __has_attribute while
> retaining backwards compatibility. It allows you to specify exactly
> which attribute syntax you desire. If no specific syntax is specified,
> it behaves as it always has.
>> The supported forms are:
>> __has_attribute(__attribute__((ident))) // GNU-style
> __has_attribute(__declspec(ident)) // MS-style
> __has_attribute([[ident]]) // C++11-style
> __has_attribute([[scope::ident]]) // C++11-style
> __has_attribute(ident) // Keywords, or "don't care"
>> Note that attribute arguments are not supported by design -- they
> really don't make any sense in the context of a feature macro.
Hi Aaron,
This is a step forward with some long-standing problems so certainly
would be a step forward. The syntax is unconventional but not unreasonable.
Have you confirmed that the new __has_attribute() syntax can still be
defined to an empty expansion? That pattern is important to provide
source compatibility with gcc / MSVC. The latter in particular has
fairly different expansion rules to watch out for -- I've got a feeling
it'll be OK as long as no commas appear in the argument list (which was
a problem with the other proposed "cxx, ..." syntax) but it's worth
double checking.
Alp.
>> ~Aaron
>>> _______________________________________________
> cfe-dev mailing list
>cfe-dev at cs.uiuc.edu>http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
--
http://www.nuanti.com
the browser experts