March 20, 2021
there's a value passed as template parameter which is know at compile time (can be used with static if) but I don't know how can I pass it around and use in a property. Obviously enum deosn't work because it would be a local to the function. immutable would result in compiler can't read it at compile time. version doesn't work either because it isn't at module scope but a function.

full code:


struct S
{
	enum x = init!(false, 10);
	enum y = init!(true, 20);

	this(string s)
	{
		type = Type.type1;
	}

	this(int n)
	{
		type = Type.type2;
	}

	static auto init(bool v, int val)()
	{
		auto s = S();

		static if(v)
		{
			s.type = Type.type1;
		}
		else
		{
			s.type = Type.type2;
		}

		s.n = val;
		return s;
	}

	int value()
	{
		// would to use static if here or just
		// get rid of that check if type is Type.type1,
		// information which is available at init()
		// template function.
		if(type == Type.type2) {
			// do something
		}

		return n;
	}

	Type type;
	int n;
}

enum Type
{
	type1,
	type2,
	type3
}
March 20, 2021
struct S
{
	this(string s)
	{
		type = Type.type1;
	}

	this(int n)
	{
		type = Type.type2;
	}

	Type type;
	int n;
}

int value(S s)()
{
	static if(s.type == Type.type2) {
		// do something
	}

	return n;
}