module dc.ignore;

unittest {
	static assert(__traits(compiles, {
		_ = 2 + 3;
		_ = _;
	}));
}

/++
`_` is a enum that provides overloaded `=` operator. That overload takes a value and promptly throws it away.
To avoid unnecessary copies, argument has `in` attribute. Don't know if it actually does any good though.
Examples:
---
_ = 2 + 3;
_ = new A();
---
+/
enum _ = Impl();

private:
struct Impl {
	/++
	Take an argument, throw it away and do nothing.
	Params:
		first = value to be ignored.
	+/
	pragma(inline, true);
	void opAssign(T)(in T) inout { }
}