How to ensure template function can be processed during compile time

Max Samukha maxsamukha at gmail.com
Wed Jul 8 20:33:25 UTC 2020


On Wednesday, 8 July 2020 at 20:11:05 UTC, IGotD- wrote:

>
> Now since mySize is a template, shouldn't this work mySize!v, 
> but it doesn't? What essential understanding have I missed here?

You are trying to use a run-time value of v at compile-time, 
which is not possible. If you want the modified size of the type 
of a variable, you can pass the variable to the compile-time 
function by alias:

enum mySize(alias e) = e.sizeof + 42;

int v;
enum size = mySize!v;

pragma(msg, size); // 46LU


If you want to the size of the type of a run-time expression, you 
will have to use typeof:

static assert(mySize!(typeof(v + 1)) == 46);


More information about the Digitalmars-d-learn mailing list