This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: Default argument for templatized function
Ok to ammend that, I'm not trying to be hostile. I'm really just
looking for sympathy :P, perhaps that would have been better found else
where.
Adruab
On Thu, 2004-05-13 at 14:46, Adrian Bentley wrote:
> Yeah, ok, fine, it's nice to see that no one else finds this
> irritating. I fixed it already, but it is a hack (generics are supposed
> to be elegant...).
>
> However, gcc still seems to be inconsistent. The reason why the second
> one worked, was that I had two functions (one with a 3rd argument and
> one without). Shouldn't it cause a warning or something if it's
> ignoring a default argument like that, and there's a second function
> with the exact same first two? I mean sure it can all be chalked up to
> template weirdness, but sheesh.
>
> In the end these are all just work arounds for not being able to have
> default template arguments for functions (which should have been fixed
> long ago). Standards are good, but it seems to be becoming more and
> more inflexible, but perhaps that is just me being confused.
>
> Thanks for the smackdown folks (slightly enlightening though it was),
> I'll be sure to just fix what I've got in the future.
>
> Adruab
>
> On Thu, 2004-05-13 at 01:05, Jonathan Wakely wrote:
> > On Wed, May 12, 2004 at 10:49:51AM -0700, Adrian Bentley wrote:
> >
> > > Yeah, ok. I really do know what I'm talking about with C++, I just
> > > haven't
> > > been able to get it to do what I want :P. And I figured it was
> > > something
> > > like that (with respect to interpreting...), but why would it work so
> > > easily
> > > for the other case? (and yes just calling with the two parameters works
> > > just
> > > fine...)
> >
> > I can't get the code you posted (incomplete as it was) to compile with
> > GCC 2.95, 3.3, 3.4, or with Comeau's compiler.
> >
> > > I definitely know MANY ways to get around it, but it still makes generic
> > > programming WAY more of a pain in the ass if you can't let it figure
> > > things
> > > like that out for itself.
> >
> > The solution I posted does what you want, with little extra code. Making
> > it do it your way would require a change to the language, which is
> > unnecessary since you can achieve the desired effect as I showed.
> >
> > > Without the functionality of deriving the template for a default
> > > argument,
> > > which seems pretty straight forward to me by the way, it makes that a
> > > fairly
> > > gross limitation of gcc (lack of function specialization AND lack of
> > > ability
> > > to intuit from a default parameter). I know there could be some issues
> > > depending on the order the compiler goes through the steps, but man...
> > > it
> > > doesn't seem that complicated (I don't have any specific reference in
> > > Bjarne
> > > or anything...).
> >
> > You never said which version of the compiler you had tried, but it doesn't
> > matter as GCC is right to reject the code you posted.
> >
> > > So should I submit this as a bug then? It seems like the compiler
> > > should be
> > > able to do that (since it can't do def. template arguments for
> > > functions).
> >
> > That's the rules of the language. As llewelly said, see 14.8.2.4/17.
> >
> > Calling a function template with no arguments and without explicitly
> > stating which specialisation you want means that the compiler cannot
> > deduce the parameters. This is not a limitation of GCC.
> >
> > > Of course if they add default template arguments for functions... then
> > > it
> > > would be fine. Suggestions?
> >
> > You could submit a proposal for a language change to the standards
> > committee (but don't hold your breath for it to be accepted).
> >
> > jon
>
>
>