Private functions and allMembers

Carl myemail at mail.com
Fri Jan 3 10:30:56 PST 2014


Here is some test code:

// --- start --- //
// main.d //
import std.stdio;
import extra;

void main()
{
	void function() func;

	foreach(mem; __traits(allMembers, __traits(parent, test)))
	{
		foreach(att; __traits(getAttributes, mixin(mem)))
		{
			if(att == "good") func = &mixin(mem);
		}
	}

	if(func) func();
	else writeln("func not assigned");
}

// extra.d //
import std.stdio;

@("good")
public void test()
{
	writeln("test()");
}

@("bad")
private void badtest()
{
}
// --- end --- //


main.d(13): Error: module main function extra.badtest is private
main.d(15): Error: module main function extra.badtest is private

I understand the need to prevent access to private members, but
how does one work around this?
Adding an if statment with __traits(compiles, mixin(mem)) still
gives errors. However, pragma(msg... shows it does return false
for the private function.


More information about the Digitalmars-d-learn mailing list