digitalmars.D.bugs - [Issue 16023] New: Add template or trait to find the importable
- via Digitalmars-d-bugs (34/34) May 13 2016 https://issues.dlang.org/show_bug.cgi?id=16023
https://issues.dlang.org/show_bug.cgi?id=16023 Issue ID: 16023 Summary: Add template or trait to find the importable symbol name for a type Product: D Version: D2 Hardware: x86 OS: Linux Status: NEW Severity: enhancement Priority: P1 Component: phobos Assignee: nobody puremagic.com Reporter: erikas.aubade gmail.com DMD 2.071's new visibility rules make it so that if you're introspecting a type from inside a template, you need to locally import the module that it comes from; best practices would dictate you only import the specific symbol you're attempting to introspect. Unfortunately, none of the ways I could come up worked in every case mixin("import " ~ moduleName!T ~": " ~ T.stringof ~ ";"); fails with templated types, as the instantiation causes the parsing to fail. Substituting __traits(identifier, T) fails on nested types Using a selective TemplateOf like so: static if (__traits(compiles, TemplateOf!T)) { private alias symb = TemplateOf!T; } else { private alias symb = T; } enum importableName = __traits(identifier, symb); fails on non-templated classes that inherit from templated ones. Basically, the long and short of it is that this seems like it should be a common enough use case to warrant something to help us do this without having to do a ton of CTFE string parsing and substitution. --
May 13 2016