Re: is __traits(allMembers) usable in a non-deprecated way?

2016-07-05 Thread captaindet via Digitalmars-d

On Friday, 8 April 2016 at 09:50:52 UTC, Atila Neves wrote:

On Thursday, 7 April 2016 at 05:41:06 UTC, E.S. Quinn wrote:
__traits(allMembers, ) has always been pretty much 
essential to any non-trivial struct, class, or module-based 
introspection, but given the visibility rules changes in 
2.071.0, it looks like it's not even allowed to check whether 
a given symbol is public. (i.e. with __traits(getProtection, 
Type, member))


Is there a new, approved way of doing this?


I just had to change unit-threaded to get it to compile without 
deprecation warnings (and in one case a compiler error). I 
don't know of any approved way of doing it, I just did the 
first thing that worked, which was to check if something was 
private by:


private template isPrivate(alias module_, string moduleMember) {
mixin(`import ` ~ fullyQualifiedName!module_ ~ `: ` ~ 
moduleMember ~ `;`);
static if(__traits(compiles, 
isSomeFunction!(mixin(moduleMember {

enum isPrivate = false;
} else {
enum isPrivate = true;
}
}


Notice the mixed-in import.

Atila


i just tried this trick for the first time. it does not seem to 
work for me (Windows/DMD32 D Compiler v2.071.1): it alway returns 
false, even for private members. is there another way? (i have 
the same problem as OP.


Re: is __traits(allMembers) usable in a non-deprecated way?

2016-04-08 Thread Atila Neves via Digitalmars-d

On Thursday, 7 April 2016 at 05:41:06 UTC, E.S. Quinn wrote:
__traits(allMembers, ) has always been pretty much 
essential to any non-trivial struct, class, or module-based 
introspection, but given the visibility rules changes in 
2.071.0, it looks like it's not even allowed to check whether a 
given symbol is public. (i.e. with __traits(getProtection, 
Type, member))


Is there a new, approved way of doing this?


I just had to change unit-threaded to get it to compile without 
deprecation warnings (and in one case a compiler error). I don't 
know of any approved way of doing it, I just did the first thing 
that worked, which was to check if something was private by:


private template isPrivate(alias module_, string moduleMember) {
mixin(`import ` ~ fullyQualifiedName!module_ ~ `: ` ~ 
moduleMember ~ `;`);
static if(__traits(compiles, 
isSomeFunction!(mixin(moduleMember {

enum isPrivate = false;
} else {
enum isPrivate = true;
}
}


Notice the mixed-in import.

Atila


is __traits(allMembers) usable in a non-deprecated way?

2016-04-06 Thread E.S. Quinn via Digitalmars-d
__traits(allMembers, ) has always been pretty much 
essential to any non-trivial struct, class, or module-based 
introspection, but given the visibility rules changes in 2.071.0, 
it looks like it's not even allowed to check whether a given 
symbol is public. (i.e. with __traits(getProtection, Type, 
member))


Is there a new, approved way of doing this?