Hey Jay,
When you inherit from a templated base, and explicitly call the
constructor, you must instantiate the template, otherwise it's
ambiguous.
The line:
explicit InternalGetCommandsRequest(CallbackType* callback) :
CancelableRequest(callback) {
Should be:
explicit InternalGetCommandsRequest(CallbackType* callback) :
CancelableRequest<InternalGetCommandsCallback>(callback) {
That compiles fine for me here.
Thanks
-- dean
On Wed, Feb 11, 2009 at 12:12 PM, Dean McNamee <[email protected]> wrote:
> I'll look at this today.
>
> On Wed, Feb 11, 2009 at 5:42 AM, Amanda Walker <[email protected]> wrote:
>>
>> At first glance, how does CallbackType* become a const CallbackType& ?
>> This may be one of many cases where VC++ plays a little loose with
>> C++ type rules...
>>
>> At least, that's how I read the error message.
>>
>> --Amanda
>>
>>
>> On Tue, Feb 10, 2009 at 6:26 PM, James Hawkins <[email protected]> wrote:
>>> Hi,
>>>
>>> I was porting session_services.cc to posix today, and I ran across a
>>> g++ bug that will definitely block efforts to use CancelableRequest,
>>> at least on Linux. While I'm savvy enough with C++, I'm having
>>> trouble coming up with an explanation for what the problem is here.
>>> I'd like to file a bug with gcc, but I don't want to just toss this
>>> file on their laps. Can someone take a look at the test case I've
>>> attached and see if they can shed some light? btw this test case
>>> compiles successfully in visual studio.
>>>
>>> $ g++ testcase.cc
>>> testcase.cc: In constructor
>>> 'InternalGetCommandsRequest::InternalGetCommandsRequest(CallbackRunner<Tuple2<int,
>>> InternalGetCommandsRequest> >*)':
>>> testcase.cc:89: error: class 'InternalGetCommandsRequest' does not
>>> have any field named 'CancelableRequest'
>>> testcase.cc:89: error: no matching function for call to
>>> 'CancelableRequest<CallbackRunner<Tuple2<int,
>>> InternalGetCommandsRequest> > >::CancelableRequest()'
>>> testcase.cc:21: note: candidates are:
>>> CancelableRequest<CB>::CancelableRequest(CB*) [with CB =
>>> CallbackRunner<Tuple2<int, InternalGetCommandsRequest> >]
>>> testcase.cc:13: note:
>>> CancelableRequest<CallbackRunner<Tuple2<int,
>>> InternalGetCommandsRequest> > >::CancelableRequest(const
>>> CancelableRequest<CallbackRunner<Tuple2<int,
>>> InternalGetCommandsRequest> > >&)
>>>
>>> It seems that the critical point is:
>>>
>>> no matching function for call to
>>> 'CancelableRequest<CallbackRunner<Tuple2<int,
>>> InternalGetCommandsRequest> > >::CancelableRequest()'
>>>
>>> when the code in question is:
>>>
>>> explicit InternalGetCommandsRequest(CallbackType* callback) :
>>> CancelableRequest(callback) { }
>>>
>>> For some reason, g++ is not picking up that we are passing a var of
>>> type CallbackType* which fully translates to:
>>>
>>> const CancelableRequest<CallbackRunner<Tuple2<int,
>>> InternalGetCommandsRequest> > >&
>>>
>>> which would match the expected:
>>>
>>> CancelableRequest<CallbackRunner<Tuple2<int,
>>> InternalGetCommandsRequest> > >::CancelableRequest(const
>>> CancelableRequest<CallbackRunner<Tuple2<int,
>>> InternalGetCommandsRequest> > >&)
>>>
>>>
>>> Thanks,
>>> James Hawkins
>>>
>>> >
>>>
>>
>> >>
>>
>
--~--~---------~--~----~------------~-------~--~----~
Chromium Developers mailing list: [email protected]
View archives, change email options, or unsubscribe:
http://groups.google.com/group/chromium-dev
-~----------~----~----~----~------~----~------~--~---