Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > return type deduction for a function template

Reply
Thread Tools

return type deduction for a function template

 
 
C++Liliput
Guest
Posts: n/a
 
      10-24-2008
Consider the following code

template<class T1, class T2>
T2 sum(T1 a, T1 b)
{
T2 ret = a + b;
return ret;
}

int main()
{
float f1 = 2, f2 = 3;
int i1 = 2, i2 = 4;

sum<float>(f1, f2); //ERROR
float fret = sum<float>(f1, f2); //ERROR
}

Both the statements marked as "ERROR" throw errors during compilation.
Now I can understand the first error in that a return type cannot be
possibly deduced. But what I don't understand is the second error. Why
is the return type not automatically deduced to be float? Such a
deduction happens for arguments of a function template (in case we
don't specify the data type during template instantiation directly).
Then why cannot it happen for the return type? Is it a compiler bug or
was it intended to be the behavior? If so why? I am using g++ compiler
on Linux.
 
Reply With Quote
 
 
 
 
SG
Guest
Posts: n/a
 
      10-24-2008
On 24 Okt., 07:05, "C++Liliput" <(E-Mail Removed)> wrote:
> Consider the following code
>
> template<class T1, class T2>
> T2 sum(T1 a, T1 b)
> {
> * *T2 ret = a + b;
> * *return ret;
>
> }
>
> int main()
> {
> * *float f1 = 2, f2 = 3;
> * *int i1 = 2, i2 = 4;
>
> * *sum<float>(f1, f2); //ERROR
> * *float fret = sum<float>(f1, f2); //ERROR
> *}


There *is* no type deduction for the return type. But you may do the
following:

template<class T2, class T1> // <-- swapped T1 & T2
T2 sum(T1 a, T1 b)
{
T2 ret = a + b;
return ret;
}

int main()
{
float f1 = 2, f2 = 3;

sum<float>(f1, f2); //OK, T2=float, T1=float (deduced)
}

Cheers,
SG
 
Reply With Quote
 
 
 
 
James Kanze
Guest
Posts: n/a
 
      10-24-2008
On Oct 24, 9:08 am, Hendrik Schober <(E-Mail Removed)> wrote:
> C++Liliput wrote:
> > Consider the following code


> > template<class T1, class T2>
> > T2 sum(T1 a, T1 b)
> > {
> > T2 ret = a + b;
> > return ret;
> > }


> > int main()
> > {
> > float f1 = 2, f2 = 3;
> > int i1 = 2, i2 = 4;


> > sum<float>(f1, f2); //ERROR
> > float fret = sum<float>(f1, f2); //ERROR
> > }


> > Both the statements marked as "ERROR" throw errors during
> > compilation. Now I can understand the first error in that a
> > return type cannot be possibly deduced. But what I don't
> > understand is the second error. Why is the return type not
> > automatically deduced to be float? Such a deduction happens
> > for arguments of a function template (in case we don't
> > specify the data type during template instantiation
> > directly). Then why cannot it happen for the return type?
> > Is it a compiler bug or was it intended to be the behavior?
> > If so why? I am using g++ compiler on Linux.


> I'm afraid the answer is "because the language was designed
> to not to support this". (That it's not impossible to do
> this can be seen in other languages.)


Other languages are other languages. I'm not sure it would work
that well in C++. (Amongst other things, it would offer yet
another possibility for ambiguity in overload resolution. I
hope you're not going to argue that overload resolution is too
simple in C++, and needs to be made more complicated.)

It's possible to do in C++, in specific cases where it makes
sense. Just have the class return a proxy object with a

template< typename T > Proxy:perator T() const ;

function.

--
James Kanze (GABI Software) email:(E-Mail Removed)
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
function template type deduction from default parameter tobias.loew@steag.com C++ 2 01-08-2013 07:53 AM
function pointer as template parameter + type deduction er C++ 5 06-09-2009 02:04 AM
template class instantiate without template parameter, automatic type deduction Fei Liu C++ 4 10-26-2007 02:39 PM
template class instantiate without template parameter, automatictype deduction Fei Liu C++ 0 10-25-2007 08:12 PM
Template type deduction issues Dilip C++ 3 08-17-2006 11:02 PM



Advertisments