Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c++ > #5627

Re: Template argument determination

From Ruben Safir <ruben@mrbrklyn.com>
Newsgroups comp.lang.c++
Subject Re: Template argument determination
Date 2011-05-26 16:12 +0000
Organization PANIX Public Access Internet and UNIX, NYC
Message-ID <irlu67$6kt$2@reader1.panix.com> (permalink)
References <irh227$8du$1@dont-email.me> <slrnitob96.77f.aggedor@earl-grey.cloud9.net> <irhdh7$na0$1@dont-email.me> <slrnitqfiq.10rf.aggedor@earl-grey.cloud9.net>

Show all headers | View raw


On Wed, 25 May 2011 12:37:30 -0500, A. Bolmarcich wrote:


> I did not say that conversion by construtor was used when deducing
> template arguments.  It is used after the specific function to call has
> been determined.  Determining the specific function to call may involve
> instantating function templates using deduced template arguments.
> 

I understand this.

> I snipped from your post all but what you wrote and explained the
> difference between using
> 
>   foo(42)
> 
> and
> 
>   foo<int>(42)
> 
> in the example you wrote.  With foo(42), the function template argument
> was neither explicitly specified nor deduced, and the template was not
> instantiated.
>


I don't understand this.

 
>>> On 2011-05-24, Ruben Safir <ruben@mrbrklyn.com> wrote:
>>>
>>>> > Bingo - thanks for taking the time to give me this explanation. 
>>>> > But its not capable of doing this implicit conversation unless T is
>>>> > defined as an int. The compiler couldn't deduce this otherwise.
>>> A compiler should do the implicit conversion as long as the parameter
>>> type has an accessible
>>>
>>> - non-explicit constructor that can take a value of type T as the only
>>>   argument, or
>>> - conversion function of the form: operator T()
>>
>> Let me explain what I am reading here.  Ruben: "compiler cannot use any
>> conversion unless T is defined".  You: "A compiler should do the
>> conversion." - as if it doesn't matter whether type is deduced or not.
>


Now you totally lost me.  I find when I read the text books, this often 
happens.  I was reading the section when Templates are instantated, and i 
similarly confuse the heck out of me.
 
> What Ruben wrote was: "But its not capable of doing this implicit
> conversion unless T is defined as an int."  Your reading missed some of
> the words Ruben wrote.  I wrote that an implicit conversion from
> function arguments to function parameters should be done even if T is
> defined as something other than an int.  

See the language started to get very confusing.  We have template 
parameters, function parameters, template arguments, function 
arguments...my head is swiming and to make it harder, you keep 
substituting structs for classes.


> For example,
> 
>   template <class T>
>   struct List {
>     List() {}
>   };
> 
>   template <class T>
>   struct X {
>     X(T x) {}
>     X(List<T> x) {}
>   };
> 
>   template <class T>
>   void foo(X<T> x) {}
> 
>   int main() {
>     List<int> il;
> 
>     foo<int>(42);
>     foo<List<int> >(il);
>   }
> 
> For the call foo<int>(42), T is defined as an int and the signature of
> the instantiated function is
> 
>   foo<int>(X<int>)
> 
> As part of calling that function, the argument value 42 is implicitly
> converted to the X<int> parameter, using the X(int) constructor.
> 
> For the call foo<List<int> >(il), T is defined as a List<int> and the
> signature of the instantiated function is
> 
>   foo<List<int> >(X<List<int> >)
> 
> As part of calling that function, the argument value il is implicitly
> converted to the X<List<int> > parameter, using the X(List<int>)
> constructor.  In this case, a conversion by constructor is done even
> though T is not defined as an int.
> 
> [snip]

Back to comp.lang.c++ | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Template argument determination Ruben Safir <ruben@mrbrklyn.com> - 2011-05-23 20:31 +0000
  Re: Template argument determination Ruben Safir <ruben@mrbrklyn.com> - 2011-05-24 02:50 +0000
    Re: Template argument determination Michael Doubez <michael.doubez@free.fr> - 2011-05-24 03:48 -0700
    Re: Template argument determination "Balog Pal" <pasa@lib.hu> - 2011-05-24 13:06 +0200
      Re: Template argument determination Ruben Safir <ruben@mrbrklyn.com> - 2011-05-24 14:44 +0000
        Re: Template argument determination Ruben Safir <ruben@mrbrklyn.com> - 2011-05-24 15:04 +0000
          Re: Template argument determination "Balog Pal" <pasa@lib.hu> - 2011-05-24 17:33 +0200
          Re: Template argument determination Victor Bazarov <v.bazarov@comcast.invalid> - 2011-05-24 11:43 -0400
  Re: Template argument determination "A. Bolmarcich" <aggedor@earl-grey.cloud9.net> - 2011-05-24 12:32 -0500
    Re: Template argument determination Ruben Safir <ruben@mrbrklyn.com> - 2011-05-24 18:08 +0000
      Re: Template argument determination "A. Bolmarcich" <aggedor@earl-grey.cloud9.net> - 2011-05-24 14:32 -0500
        Re: Template argument determination Victor Bazarov <v.bazarov@comcast.invalid> - 2011-05-24 15:48 -0400
          Re: Template argument determination "A. Bolmarcich" <aggedor@earl-grey.cloud9.net> - 2011-05-24 17:11 -0500
            Re: Template argument determination Victor Bazarov <v.bazarov@comcast.invalid> - 2011-05-24 19:04 -0400
              Re: Template argument determination "A. Bolmarcich" <aggedor@earl-grey.cloud9.net> - 2011-05-25 12:37 -0500
                Re: Template argument determination Ruben Safir <ruben@mrbrklyn.com> - 2011-05-26 16:12 +0000
                Re: Template argument determination "A. Bolmarcich" <aggedor@earl-grey.cloud9.net> - 2011-05-26 13:25 -0500
            Re: Template argument determination Ruben Safir <ruben@mrbrklyn.com> - 2011-05-25 02:47 +0000
              Re: Template argument determination "Balog Pal" <pasa@lib.hu> - 2011-05-25 10:06 +0200
              Re: Template argument determination "A. Bolmarcich" <aggedor@earl-grey.cloud9.net> - 2011-05-25 12:40 -0500

csiph-web