Doubt Branchless code

Richard (Rikki) Andrew Cattermole richard at cattermole.co.nz
Tue Apr 7 23:48:37 UTC 2026


On 07/04/2026 7:08 AM, matheus wrote:
> Hello,
> 
> Back in C days I used to write code with function pointer to avoid 
> writing branches inside loops,
> 
> To avoid this:
> 
> for(;;){
>    if(opt == 1){ func_1(); }else{func_2()};
> }
> Or maybe using switch if there were more options...
> 
> So I used to do:
> 
> if(opt == 1){ fp  = &func_1(); }else{ fp = &func_2()};
> 
> for(;;){
>   fp();
> }
> 
> 
> I would like to know if there is a different way of doing that in D 
> during RT execution and dynamic change of function execution before the 
> loops?
> 
> Thanks in advance,
> 
> Matheus.

How I typically do it:

```d
void outer() {
	void inner(bool a, bool b)() {
		for(;b;) {
			static if (a) {}
		}
	}

	if (cond1 && !cond2)
		inner!(true, false);
	else if (cond2 && !cond1)
		inner!(false, true);
	else if (cond1 && cond2)
		inner!(true, true);
	else
		inner!(false, false);
}
```



More information about the Digitalmars-d-learn mailing list