Thread overview
How use Predicate (alias pred = "a*b")?
May 13, 2021
Marcone
May 13, 2021
Adam D. Ruppe
May 13, 2021
Marcone
May 13, 2021
Marcone
May 13, 2021

import std;

template foo(alias pred = "a*b"){
void foo(int x, int y){
writeln(x.unaryFun!pred);
}
}

void main(){
foo(5, 4);
}

"a" works, but "b" not work.
I get this error: Error: undefined identifier b

May 13, 2021

On Thursday, 13 May 2021 at 21:30:43 UTC, Marcone wrote:

>

template foo(alias pred = "a*b"){
void foo(int x, int y){
writeln(x.unaryFun!pred);

First, you really shouldn't use these at all. instead of a string, just pass an actual function to the thing as the predicate.

but if you must use it, unaryFun has one argument, so just a. if you want a and b, two arguments, that's binaryFun.

May 13, 2021

On Thursday, 13 May 2021 at 21:38:25 UTC, Adam D. Ruppe wrote:

>

On Thursday, 13 May 2021 at 21:30:43 UTC, Marcone wrote:

>

template foo(alias pred = "a*b"){
void foo(int x, int y){
writeln(x.unaryFun!pred);

First, you really shouldn't use these at all. instead of a string, just pass an actual function to the thing as the predicate.

but if you must use it, unaryFun has one argument, so just a. if you want a and b, two arguments, that's binaryFun.

This is just a simple example of how it works. I won't use it. However, I believe it will be very useful for meta programming.

May 13, 2021

On Thursday, 13 May 2021 at 21:38:25 UTC, Adam D. Ruppe wrote:

>

On Thursday, 13 May 2021 at 21:30:43 UTC, Marcone wrote:

>

template foo(alias pred = "a*b"){
void foo(int x, int y){
writeln(x.unaryFun!pred);

First, you really shouldn't use these at all. instead of a string, just pass an actual function to the thing as the predicate.

but if you must use it, unaryFun has one argument, so just a. if you want a and b, two arguments, that's binaryFun.

Thank you. binaryFun solved the problem.