On Mon, 2015-01-12 at 18:50 +0000, Gordon Sim wrote:
> On 01/12/2015 06:00 PM, Chuck Rolke wrote:
> > Visual Studio 2010 x64 generates five new warnings compiling LossyLvq code.
> > The code may be correct and the compiler is known to warn on correct code.
> > That said, if the code could be reorganized to avoid the warnings maybe
> > Coverity would stop complaining as well.
> 
> [...]
> 
> > 3>C:\Program Files (x86)\Microsoft Visual Studio 
> > 10.0\VC\include\memory(931):
> >         warning C4150: deletion of pointer to incomplete type 
> > 'qpid::broker::MessageMap'; no destructor called
> > 3>          
> > D:\Users\crolke\git\rh-qpid\qpid\cpp\src\qpid/broker/QueueCursor.h(65) :
> >        see declaration of 'qpid::broker::MessageMap'
> > 3>          C:\Program Files (x86)\Microsoft Visual Studio 
> > 10.0\VC\include\memory(930) : while compiling class template member 
> > function 'std::auto_ptr<_Ty>::~auto_ptr(void)'
> > 3>          with
> > 3>          [
> > 3>              _Ty=qpid::broker::MessageMap
> > 3>          ]
> > 3>          ..\..\cpp\src\qpid\broker\LossyLvq.cpp(27) : see reference to 
> > class template instantiation 'std::auto_ptr<_Ty>' being compiled
> > 3>          with
> > 3>          [
> > 3>              _Ty=qpid::broker::MessageMap
> > 3>          ]
> > 3>  QueueFactory.cpp
> 
> That one seems fair, and I've checked in what I believe is a fix for that.
> 
> > 3>D:\Users\crolke\git\rh-qpid\qpid\cpp\src\qpid/broker/LossyLvq.h(38): 
> > warning C4250: 'qpid::broker::LossyLvq' : inherits 
> > 'qpid::broker::Lvq::qpid::broker::Lvq::push' via dominance
> > 3>          D:\Users\crolke\git\rh-qpid\qpid\cpp\src\qpid/broker/Lvq.h(39) 
> > : see declaration of 'qpid::broker::Lvq::push'
> >
> > 3>D:\Users\crolke\git\rh-qpid\qpid\cpp\src\qpid/broker/LossyLvq.h(38): 
> > warning C4250: 'qpid::broker::LossyLvq' : inherits 
> > 'qpid::broker::LossyQueue::qpid::broker::LosQueue::checkDepth' via dominance
> > 3>          
> > D:\Users\crolke\git\rh-qpid\qpid\cpp\src\qpid/broker/LossyQueue.h(36) : see 
> > declaration of 'qpid::broker::LossyQueue::checkDepth'
> 
> Those are exactly the methods I expect to be inherited. LossyQueue 
> alters the implementation of checkDepth() to support the 'ring' 
> behaviour, Lvq alters the implementation of push() to support the lvq 
> behaviour. What I wanted was a Queue type that inherited both these 
> behaviours. To me, this is exactly the use case virtual inheritance was 
> intended for.
> 
> I could of course organise the code so as not to need to use virtual 
> inheritance, but I'd rather only do that if there was a good reason.

> With respect to the last two warnings  above, does the attached patch 
> resolve them? (This overrides both methods in the most derived class and 
> explicitly chooses the implementation to use).

No need to override, just put 
    using LossyQueue::checkDepth; 
    using Lvq:push;
in your declaration. That "copies" the desired base-name into your class
name-space without declaring a new function. This is one of the rare
occasions involving inheritance where C++ actually does what you expect.
It's a pity (but not entirely unjustified) that VC++ assumes you are
probably confused anyway :)



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org

Reply via email to