November 30, 2023

Whats the current state of the art of compile time counters

my old code:

//dmd -mixin=mix -run count.d

import std;
template counter(){
	template access(int i){
		//pragma(msg,j,"acess");
		enum access=mixin("__LINE__");
	}
	template get_(int i,int sentinel){
		//pragma(msg,i," ",sentinel);
		static if(access!(i)>sentinel){
			enum get_=i;
		} else {
			enum get_=get_!(i+1,sentinel);
	}}
	template get(int i=__LINE__){
		enum setty=mixin("__LINE__");
		alias get=get_!(0,setty);
	}
}
void main(){
	counter!().get!().writeln;
	counter!().get!().writeln;
	counter!().get!().writeln;
}

I'm picking dependencies for a build environment where I want to be productive for at least a few years and picking which compiler bug to depend on probably deserves some consideration

Are there other options and what pros and cons do you see with other compiler bugs?