digitalmars.D.learn - Template arg deduction
- Kevin Bailey (27/27) Jul 07 2021 I'm trying to use some fairly simple template argument deduction,
- =?UTF-8?Q?Ali_=c3=87ehreli?= (9/11) Jul 07 2021 There are other ways of achieving the same thing the simplest of which
- Paul Backus (2/11) Jul 07 2021 https://issues.dlang.org/show_bug.cgi?id=22111
- Tejas (24/51) Jul 07 2021 The following works:
- vit (16/43) Jul 07 2021 This work:
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
}
```
Jul 07 2021
On 7/7/21 12:14 PM, Kevin Bailey wrote:fairly simple template argument deductionIt'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
Jul 07 2021
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
Jul 07 2021
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;
}
```
Jul 07 2021
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);
}
```
Jul 07 2021









=?UTF-8?Q?Ali_=c3=87ehreli?= <acehreli yahoo.com> 