Proposed semantics for attributes in C++ (and in C?)
Mark Mitchell
mark@codesourcery.com
Tue Oct 17 19:21:00 GMT 2006
Geoffrey Keating wrote:
>> A typedef declaration which adds semantic attributes to a non-class
>> type is valid, but again creates an entirely new type.
>> It is invalid to
>> do anything that would require either type_info or a mangled name for
>> "Q", including using it as an argument to typeid, thowing an exception
>> of a type involving "Q", or declaring a template to take a parameter
>> of a type involving "Q". (We could relax some of these restrictions
>> in future, if we add mangling support for attributes.)
>
> Declaring a function which takes a 'Q' also requires the mangled name of 'Q'.
Good point!
>> where T is some invented type name different from all others in the program.
>>
>> For example given:
>>
>> __attribute__((packed)) S v;
>>
>> the type of "&v" is "__attribute__((packed)) S *", and cannot be
>> passed to a function expecting an "S*", but can of course be passed to
>> a function expecting an "__attribute__((packed)) S *", or a typedef
>> for such a type.
>
> ... except that there can't be any such functions. You could assign
> it to another variable of the same type, or a field of a class with
> that type.
Right. And, since there seems to be consensus that you shouldn't be
able to apply semantic attributes to class types, "packed" is a bad
example there too. (If you applied "packed" at the point of declaration
of "S", then "S" has a different layout than it otherwise would, but we
don't need to do anything regarding mangling, etc.)
Thanks,
--
Mark Mitchell
CodeSourcery
mark@codesourcery.com
(650) 331-3385 x713
More information about the Gcc
mailing list