Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c++ > #5627
| 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> |
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 | Next — Previous in thread | Next in thread | Find similar
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