digitalmars.D.learn - Mixin/static if issue
- DLearner (18/18) Aug 25 2021 Please see below:
- H. S. Teoh (11/20) Aug 25 2021 ^^^^^^^^^^^^^^
Please see below: ``` void main() { import std.stdio; uint TestVar = 5; string mxnWrite_Size_t(string VarName) { static if (typeof(VarName).stringof == "uint") { return `write("` ~ VarName ~ `");`; } else { return `writeln("Apparently TestVar not a uint");`; } } mixin(mxnWrite_Size_t("TestVar")); } ``` What I expected was the string "TestVar". What I got was the "Apparently..." error message. Please, why is this?
Aug 25 2021
On Wed, Aug 25, 2021 at 10:16:39PM +0000, DLearner via Digitalmars-d-learn wrote:Please see below: ``` void main() { import std.stdio; uint TestVar = 5; string mxnWrite_Size_t(string VarName) {^^^^^^^^^^^^^^ Obviously, VarName is a string. Why would you expect anything else?static if (typeof(VarName).stringof == "uint") {[[...] 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 -- Many open minds should be closed for repairs. -- K5 user
Aug 25 2021
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. TI 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
Aug 25 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: [...}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: TestVarI 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. TI 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
Aug 25 2021
On Wednesday, 25 August 2021 at 22:57:23 UTC, jfondren wrote: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: TestVarConfirm works for me. Thanks!
Aug 25 2021