identify literals

monkyyy crazymonkyyy at gmail.com
Fri Jan 24 19:12:59 UTC 2025


On Friday, 24 January 2025 at 10:50:15 UTC, Dom DiSc wrote:
> Is it possible in D to find out if the parameter given to a 
> function is a literal or a compile time constant?
>
> Of course, if it has _only_ parameters known at compile time, 
> the function will be executed during CTFE, so I can check for 
> the execution time. But if it has also runtime-parameters, it 
> will only be executed during runtime. Is it still possible to 
> find out, which values are known at compile-time?
>
> They should be immutable, but do they have some other, more 
> specific property?

completes solutions; probaly not, partial solutions well....

```d
import std;
bool isctfe(alias i)(){
	bool _isctfe(alias i)(int i2){
		i2=i;
		return __ctfe;
	}
	static if(__traits(compiles,(){enum b=_isctfe!(i)(i);}())){
		return true;
	} else {
		return false;
	}
}
unittest{
	int i;
	isctfe!(i).writeln;
	isctfe!(3).writeln;
}

void foo(alias i)(float f){
	static if(isctfe!i){
		"i is ct ".write;
	} else {
		"i isnt ct ".write;
	}
	writeln("f is ",f);
}
unittest{
	int i;
	foo!(3)(13.37);
	foo!(i)(4.20);
}
```


More information about the Digitalmars-d-learn mailing list