Error: Declaration is not yet implemented in CTFE
bitwise via Digitalmars-d
digitalmars-d at puremagic.com
Fri Nov 28 13:55:27 PST 2014
On Friday, 28 November 2014 at 19:24:33 UTC, Daniel Kozak via
Digitalmars-d wrote:
> Dne Fri, 28 Nov 2014 20:01:41 +0100 bitwise via Digitalmars-d
> <digitalmars-d at puremagic.com> napsal(a):
>
>> The docs for template mixins do show mixins inside functions,
>> so is this a bug, or is there something else I'm doing wrong?
>>
>> //**************************
>> module main;
>> import std.traits;
>>
>> class ModInfo {
>>
>> }
>>
>> mixin template moduleInfo(alias MODULE) {
>> static const(ModInfo) __module_info = new ModInfo;
>> }
>>
>> const(ModInfo) getModuleInfo(alias mod)() {
>> static if(__traits(hasMember, mod, "__module_info")) {
>> return __traits(getMember, mod, "__module_info");
>> } else {
>> mixin moduleInfo!mod; // ERROR [1]
>> return __module_info;
>> }
>> }
>>
>> void main() {
>> static const(ModInfo) info = getModuleInfo!(main);
>> }
>> //**************************
>>
>> [1] main.d(17,3): Error: Declaration mixin moduleInfo!(main);
>> is not yet implemented in CTFE
>> main.d(23,31): called from here: getModuleInfo()
>
>
> module main;
>
> immutable class ModInfo {
>
> }
>
> static moduleInfo(alias MODULE)() {
> return new ModInfo();
> }
>
> static getModuleInfo(alias mod)() {
> static if(__traits(hasMember, mod, "__module_info")) {
> return __traits(getMember, mod, "__module_info");
> } else {
> return moduleInfo!mod;
> }
> }
>
> void main() {
> immutable info = getModuleInfo!(main);
> }
Thanks, but this still doesn't fix my problem. The idea is that
getModuleInfo should return the same static copy of ModInfo at
each call to avoid duplication. ModInfo is a recursive reflection
of an entire module, so it could be huge.
My goal is that someone could create a global (ModInfo
__module_info) object inside their own module through a mixin
template, which would allow reflection of private members in that
module. If getModuleInfo() was called for a module that was
missing __ module_info, a static copy would be created inside
getModuleInfo(). This would be the case if someone wanted to
reflect a static library that they themselves did not compile.
More information about the Digitalmars-d
mailing list