This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: "No matching function" -- not finding copy constructor


Joe Buck <Joe.Buck@synopsys.COM> writes:

| On Tue, May 17, 2005 at 12:00:59PM -0400, Paul Koning wrote:
| > I'm upgrading to V4.0.0 and struggling with some code that's seriously
| > into templates.  One puzzling error is this one:
| > 
| > keyed_obj.hh:159: error: no matching function for call to 'CxnIndex::CxnIndex(CxnIndex)'
| > Indeces.hh:150: note: candidates are: CxnIndex::CxnIndex(CxnIndex&)
| > Indeces.hh:145: note:                 ... and some more
| > 
| > It's not entirely clear to me why something very much like a copy
| > constructor is being invoked in the first place.  But the bigger
| > puzzle is: why isn't the copy constructor being matched?  I would have
| > thought that any call with a T argument should match a function or
| > method with an &T argument in its declaration...
| 
| CxnIndex::CxnIndex(CxnIndex&) is not a general copy constructor.  Notice
| the non-const reference.  The error message is saying that it's trying
| to pass a temporary to a copy constructor.  You would need
| 
| CxnIndex::CxnIndex(const CxnIndex&)
| 
| to match that.  As for why you need a copy constructor, we'd have to
| see the code for that, but this list isn't really the right place for
| helping you debug this problem further.

Joe is right.  But I think the diagnostic is very very confusing and
it is not obvious what was going from the type signature.  Please fill a
bugzilla PR and ask for diagnostic enhancement.

Thanks,

-- Gaby
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]