Re: Template arg deduction

2021-07-07 Thread vit via Digitalmars-d-learn

On Wednesday, 7 July 2021 at 19:14:52 UTC, Kevin Bailey wrote:
I'm trying to use some fairly simple template argument 
deduction, but
maybe I'm not getting the syntax correct. C++ doesn't event 
blink at

something like this, but D is giving me:

temptest.d(18): Error: template temptest.func cannot deduce 
function from argument types !()(bar), candidates are:

temptest.d(10):func(T)(foo!T.bar f)

I guess D can't crack open a type like that?

```
template foo(T)
{
class bar
{
T t;
}

}

void func(T)(// 10
foo!(T).bar f)
{
}

int main()
{
foo!int.bar fi;
func(fi);// 18
}
```


This work:

```d
template foo(T){
class bar{
T t;
}
}

void func(alias F : foo!T, T)(F.bar f){
}

void main(){

foo!int.bar fi;
func(fi);

}

```


Re: Template arg deduction

2021-07-07 Thread Tejas via Digitalmars-d-learn

On Wednesday, 7 July 2021 at 19:14:52 UTC, Kevin Bailey wrote:
I'm trying to use some fairly simple template argument 
deduction, but
maybe I'm not getting the syntax correct. C++ doesn't event 
blink at

something like this, but D is giving me:

temptest.d(18): Error: template temptest.func cannot deduce 
function from argument types !()(bar), candidates are:

temptest.d(10):func(T)(foo!T.bar f)

I guess D can't crack open a type like that?

```
template foo(T)
{
class bar
{
T t;
}

}

void func(T)(// 10
foo!(T).bar f)
{
}

int main()
{
foo!int.bar fi;
func(fi);// 18
}
```




The following works:
```d
import std.stdio;
template foo(T)
{
class bar
{
T t;
}

}

void func(T) (// 10
T f)   //  No need to repeat 
foo!(int).bar :)

{
}

int main()
{
foo!(int).bar fi;//brackets added, now syntax is 
correct

func(fi);// 18. int couldn't get deduced here
return 0;
}
```


Re: Template arg deduction

2021-07-07 Thread Paul Backus via Digitalmars-d-learn

On Wednesday, 7 July 2021 at 19:14:52 UTC, Kevin Bailey wrote:
I'm trying to use some fairly simple template argument 
deduction, but
maybe I'm not getting the syntax correct. C++ doesn't event 
blink at

something like this, but D is giving me:

temptest.d(18): Error: template temptest.func cannot deduce 
function from argument types !()(bar), candidates are:

temptest.d(10):func(T)(foo!T.bar f)

I guess D can't crack open a type like that?


https://issues.dlang.org/show_bug.cgi?id=22111


Re: Template arg deduction

2021-07-07 Thread Ali Çehreli via Digitalmars-d-learn

On 7/7/21 12:14 PM, Kevin Bailey wrote:

> fairly simple template argument deduction

It's not the simplest but it is still complicated. :)

> I guess D can't crack open a type like that?

There are other ways of achieving the same thing the simplest of which 
is probably the following:


void func(B)(B f) {
}

Apparently, there are additional constraints on B, which can be 
expressed in D with some flexibility, pragmatism, and optimism.


Ali



Template arg deduction

2021-07-07 Thread Kevin Bailey via Digitalmars-d-learn
I'm trying to use some fairly simple template argument deduction, 
but
maybe I'm not getting the syntax correct. C++ doesn't event blink 
at

something like this, but D is giving me:

temptest.d(18): Error: template temptest.func cannot deduce 
function from argument types !()(bar), candidates are:

temptest.d(10):func(T)(foo!T.bar f)

I guess D can't crack open a type like that?

```
template foo(T)
{
class bar
{
T t;
}

}

void func(T)(// 10
foo!(T).bar f)
{
}

int main()
{
foo!int.bar fi;
func(fi);// 18
}
```