On 03/19/2014 05:34 PM, Adam D. Ruppe wrote:
On Wednesday, 19 March 2014 at 16:10:52 UTC, Dicebot wrote:
Wait just a bit more
https://github.com/D-Programming-Language/dmd/pull/3380 :)
megarox. Make it so.
Nice. I have some ugly hacks that's probably full of bugs for this (look
at the bottom):
template isLValue(T)
{
enum isLValue = false;
}
/// ditto
template isLValue(alias T)
{
enum isLValue = !isType!T && isAddressable!T && __traits(compiles,
{ Unqual!(TypeOf!T) t = TypeOf!(T).init; });
}
/// ditto
template isRValue(T)
{
enum isRValue = false;
}
/// ditto
template isRValue(alias T)
{
static if(isType!T)
enum isRValue = false;
else
enum isRValue = __traits(compiles, { typeof(T) t = T; }) &&
!isAddressable!T;
}
template isValue(T)
{
enum isValue = false;
}
/// ditto
template isValue(alias T)
{
enum isValue = isLValue!T || isRValue!T;
}
/// ditto
template isType(T)
{
enum isType = is(T);
}
/// ditto
template isType(alias T)
{
enum isType = is(T) || isCallable!T;
}
template isTemplate(T)
{
enum isTemplate = !(isValue!T || isType!T);
}
template isTemplate(alias T)
{
enum isTemplate = !(isValue!T || isType!T);
}