How to ensure template function can be processed during compile time

H. S. Teoh hsteoh at
Wed Jul 8 20:29:06 UTC 2020

On Wed, Jul 08, 2020 at 08:11:05PM +0000, IGotD- via Digitalmars-d-learn wrote:
> Doing the same in D, would with my lack of knowledge look like this.
> size_t mySize(T)()
> {
>     return T.sizeof + 42;
> }

What you want is:

	enum mySize(T) = T.sizeof + 42;

And there is no need for a const overload.

> int v;
> enum sz = mySize!int // works, returns 46
> enum sz2 = mySize(v) // doesn't work. Error: variable v cannot be read at
> compile time

Yes, because you're trying to pass the value of a variable to mySize,
and that variable doesn't have a value until runtime.

> Here we have a difference between C++ and D as C++ was able infer the
> size of v during compile time.
> Now since mySize is a template, shouldn't this work mySize!v, but it
> doesn't? What essential understanding have I missed here?


The diminished 7th chord is the most flexible and fear-instilling chord.
Use it often, use it unsparingly, to subdue your listeners into

More information about the Digitalmars-d-learn mailing list