On Wed, Dec 12, 2012 at 11:00 AM, John McCall <[email protected]> wrote:
> On Dec 11, 2012, at 9:39 PM, Michael Han <[email protected]> wrote:
>> Thanks for the info. Do you happen to know why C++11 has this rule?
>>
>> I got into this as I noted the same was implemented in gcc 4.8 [1] while 
>> working on attributes. There are several options:
>> - Forbid C++11 attributes on explicit template instantiations and treat such 
>> program as ill formed.
>> - Issue a warning and ignore the attributes. This seems what gcc is doing.
>> - Issue a warning but not ignore the attributes. This allows existing 
>> visibility attributes migrate to new syntax with same semantics.
>>
>> Which is the right direction to go here?
>
> My *guess* is that this rule exists to say that you can't modify semantic 
> properties of an object in an explicit instantiation, and they aren't really 
> considering semantic attributes where this makes sense, or semantic 
> attributes which might reasonably modify the explicit instantiation itself.  
> It'd be good to know more, though;  maybe someone from the committee can 
> chime in.  Basically, I'm wondering whether this restriction might be lifted 
> or modified in the future.

I don't know what the original rationale was, but since there can be
both explicit instantiations and implicit instantiations of the same
entity in the same program, the rule seems sensible to me (at least
for the cases where it's not possible to prevent the implementation
from performing implicit instantiations).

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to