Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 02 Mar 2010 01:45:13 +0200
From:      Andriy Gapon <avg@freebsd.org>
To:        John Baldwin <jhb@freebsd.org>, Roman Divacky <rdivacky@freebsd.org>
Cc:        svn-src-projects@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r204537 - in projects/clangbsd/contrib/libstdc++: include/ext src
Message-ID:  <4B8C5189.40102@freebsd.org>
In-Reply-To: <201003011744.45410.jhb@freebsd.org>
References:  <201003012130.o21LUB0I022574@svn.freebsd.org> <201003011744.45410.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
on 02/03/2010 00:44 John Baldwin said the following:
> On Monday 01 March 2010 4:30:11 pm Roman Divacky wrote:
>> Author: rdivacky
>> Date: Mon Mar  1 21:30:11 2010
>> New Revision: 204537
>> URL: http://svn.freebsd.org/changeset/base/204537
>>
>> Log:
>>   Make this a little more like C++. Clang++ can grok all libstdc++
>>   now.
>>
>> Modified:
>>   projects/clangbsd/contrib/libstdc++/include/ext/ropeimpl.h
>>   projects/clangbsd/contrib/libstdc++/src/locale-inst.cc
>>
>> Modified: projects/clangbsd/contrib/libstdc++/include/ext/ropeimpl.h
>>
> ==============================================================================
>> --- projects/clangbsd/contrib/libstdc++/include/ext/ropeimpl.h	Mon Mar  1 
> 21:04:10 2010	(r204536)
>> +++ projects/clangbsd/contrib/libstdc++/include/ext/ropeimpl.h	Mon Mar  1 
> 21:30:11 2010	(r204537)
>> @@ -382,7 +382,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
>>  	  {
>>  	    _Rope_RopeLeaf<_CharT, _Alloc>* __l
>>  	      = (_Rope_RopeLeaf<_CharT, _Alloc>*)this;
>> -	    __l->_Rope_RopeLeaf<_CharT, _Alloc>::~_Rope_RopeLeaf();
>> +	    __l->template _Rope_RopeLeaf<_CharT, _Alloc>::~_Rope_RopeLeaf();
>>  	    _L_deallocate(__l, 1);
>>  	    break;
>>  	  }
> 
> Hmm, this hurts my brain to have 'template ' in the middle of a dereference.

Meet the beauty of modern C++.  You can find a similar usage of 'typename'
keyword too.


> I also don't see why it should be needed.

Hmm, I am not sure too, I think that the changed line could be simply written as
follows without any ambiguity:
__l->~_Rope_RopeLeaf();
but our base c++ complains about that construct, c++ 4.3, 4.4 and 4.5 from ports
happily accept all three forms.
clang++ from llvm-devel-2.7.r96348_1 didn't like any of the forms.
I am not a C++ expert by any stretch, though.
Here is some minimalistic test code:
//**************************************
template<typename T>
struct B
{
        B() {}
        ~B() {}
};

template<typename T>
struct S : public B<T>
{
        S() {}
        ~S() {}
};

template<typename T>
struct C
{
        void f()
        {
                S<T>* s = reinterpret_cast<S<T>*>(this);
                s->~S();
                s->S<T>::~S();
                s->template S<T>::~S();
        }
};

//**************************************

>> Modified: projects/clangbsd/contrib/libstdc++/src/locale-inst.cc
>>
> ==============================================================================
>> --- projects/clangbsd/contrib/libstdc++/src/locale-inst.cc	Mon Mar  1 
> 21:04:10 2010	(r204536)
>> +++ projects/clangbsd/contrib/libstdc++/src/locale-inst.cc	Mon Mar  1 
> 21:30:11 2010	(r204537)
>> @@ -180,11 +180,11 @@ _GLIBCXX_END_LDBL_NAMESPACE
>>    template class messages_byname<C>;
>>    
>>    // ctype
>> -  inline template class __ctype_abstract_base<C>;
>> +  template class __ctype_abstract_base<C>;
>>    template class ctype_byname<C>;
>>    
>>    // codecvt
>> -  inline template class __codecvt_abstract_base<C, char, mbstate_t>;
>> +  template class __codecvt_abstract_base<C, char, mbstate_t>;
>>    template class codecvt_byname<C, char, mbstate_t>;
> 
> Perhaps try moving the 'template' before the 'inline'?  Randomly dropping 
> 'inline' isn't really ideal I think.

My C++ skills are a bit dusty but is there such a thing as 'inline class'?
And that code (before the change) looks like an attempt at such thing via
explicit template instantiation.

-- 
Andriy Gapon



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4B8C5189.40102>