Mixin/static if issue
jfondren
julian.fondren at gmail.com
Wed Aug 25 22:57:23 UTC 2021
On Wednesday, 25 August 2021 at 22:52:23 UTC, DLearner wrote:
> On Wednesday, 25 August 2021 at 22:33:00 UTC, H. S. Teoh wrote:
> [...}
>>
>> I think what you meant to write is:
>>
>> static if (typeof(mixin(VarName)).stringof == "uint") {
>>
>> You want the type of the variable named by VarName, not the
>> type of VarName.
>>
>>
>> T
>
> I understand your reasoning, but:
>
> ```
> void main() {
> import std.stdio;
>
> uint TestVar = 5;
>
> string mxnWrite_Size_t(string VarName) {
>
> static if (typeof(mixin(VarName)).stringof == "uint") {
>
> return `write("` ~ VarName ~ `");`;
> } else {
>
> return `writeln("Apparently TestVar not a uint");`;
> }
> }
>
> mixin(mxnWrite_Size_t("TestVar"));
> }
> ```
> produced Error: variable `VarName` cannot be read at compile
> time
Contrast:
```d
void main() {
import std.stdio;
uint TestVar = 5;
string mxnWrite_Size_t(string VarName)() {
static if (typeof(mixin(VarName)).stringof == "uint") {
return `write("` ~ VarName ~ `");`;
} else {
return `writeln("Apparently TestVar not a uint");`;
}
}
mixin(mxnWrite_Size_t!"TestVar");
}
```
Output: TestVar
More information about the Digitalmars-d-learn
mailing list