Let this() figure out T implicitly?

Timon Gehr timon.gehr at gmx.ch
Fri Feb 17 17:59:37 PST 2012


On 02/18/2012 12:04 AM, Ali Çehreli wrote:
> On 02/17/2012 09:08 AM, Steven Schveighoffer wrote:
>
>  > What you are asking for is IFTI (Implicit Function Template
>  > Instantiation) on constructors, and is perfectly possible, but not
>  > implemented:
>  >
>  > http://d.puremagic.com/issues/show_bug.cgi?id=6082
>
> What was the resolution for the case when the constructor is a template?
> I think that's why IFTI doesn't work for structs and classes in C++.
> Although, I can't get the following to compile in D anyway (that old and
> annoying error message again! :p):
>
>    Error: no property 'opCall' for type 'deneme.B'
>
> import std.conv;
>
> class B
> {
>      string s;
>
>      this(T)(T t)   // <-- Is the struct a template
>                     //     or the constructor a template?

The constructor it is, and B is a class, not a struct.


>      {
>          s = to!string(t);
>      }
> }
>
> void main()
> {
>      auto b0 = B(42);
> }
>
> I wasn't around when the static opCall() was designed but it is probably
> the very first thing that bugged me about D. :) I want B(42) to be
> object construction, not opCall(), which is not even defined.
>
> Ali
>

Why? What useful semantics would that have for classes?


More information about the Digitalmars-d-learn mailing list