On Mar 28, 2012, at 12:03 PM, John McCall wrote:
> On Mar 28, 2012, at 11:50 AM, Richard Smith wrote:
>> On Wed, Mar 28, 2012 at 11:33 AM, Stepan Dyatkovskiy <[email protected]> 
>> wrote:
>> Hello John.
>> I attached reworked patch.
>> I couldn't found in CXXRecordDecl methods like "isFinal", but I know only 2 
>> ways to make class final in C++:
>> 
>> 1. Make dtor private (will work only with dynamic allocation):
>> 
>> class Final {
>> ~Final() {}
>> public:
>>  Final* create() { return new Final(); }
>> };
>> 
>> 2. Make dtor and ctor private, and create friend-child using virtual 
>> inharitance:
>> 
>> class Finalizer {
>> Final() {}
>> ~Final() {}
>> friend class Final;
>> };
>> 
>> class Final : virtual public Finalizer {
>> };
>> 
>> As I found, second way in clang doesn't use EmitAggregateCopy for assignment 
>> "Final = Final", so I wrote the check for first case only.
>> 
>> In case 1, Final can still be derived from in friends and members of the 
>> class. In case 2, it can still be derived from in friends and members of 
>> Finalizer, and in members of Final. John is referring to the C++11 'final' 
>> feature:
>> 
>> class Final final {
>> };
>> 
>> You can check for this with Record->hasAttr<FinalAttr>().
> 
> Exactly.  I'm just going to rewrite the patch, though.

Rewritten and committed as r153613.

John.

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

Reply via email to