Re: A possible enhancement related to is()

2014-01-29 Thread Andrej Mitrovic
On 1/29/14, Jakob Ovrum jakobov...@gmail.com wrote:
 On a related note, I would like the body of a template to be able
 to access aliases introduced in IsExpression's in the template's
 constraints.

Me too, but I can't remember if this was filed in bugzilla.


Re: A possible enhancement related to is()

2014-01-29 Thread bearophile

Jakob Ovrum:

We can already do this, but you have to omit the `Unused` alias 
(a semi-recent enhancement allows for that):


---
import std.traits : Unqual;

struct Tuple(Args...) {}

enum isTuple(T) = is(Unqual!T : Tuple!Types, Types...);


Thank you.

Bye,
bearophile


A possible enhancement related to is()

2014-01-28 Thread bearophile
In std.typecons there is this template, that tells if a given 
type is any tuple, this means if it's the instantiation of a 
Tuple with any argument type:



template isTuple(T)
{
static if (is(Unqual!T Unused : Tuple!Specs, Specs...))
{
enum isTuple = true;
}
else
{
enum isTuple = false;
}
}


Do you think it's worth a D enhancement request to be able to 
write that code like this?


enum isTuple(T) = is(Unqual!T Unused : Tuple!Specs, Specs...);

Bye,
bearophile


Re: A possible enhancement related to is()

2014-01-28 Thread Jakob Ovrum

On Wednesday, 29 January 2014 at 02:30:00 UTC, bearophile wrote:
In std.typecons there is this template, that tells if a given 
type is any tuple, this means if it's the instantiation of a 
Tuple with any argument type:



template isTuple(T)
{
static if (is(Unqual!T Unused : Tuple!Specs, Specs...))
{
enum isTuple = true;
}
else
{
enum isTuple = false;
}
}


Do you think it's worth a D enhancement request to be able to 
write that code like this?


enum isTuple(T) = is(Unqual!T Unused : Tuple!Specs, Specs...);

Bye,
bearophile


We can already do this, but you have to omit the `Unused` alias 
(a semi-recent enhancement allows for that):


---
import std.traits : Unqual;

struct Tuple(Args...) {}

enum isTuple(T) = is(Unqual!T : Tuple!Types, Types...);

void main()
{
Tuple!(int, string) t;
static assert(isTuple!(typeof(t)));
}
---

On a related note, I would like the body of a template to be able 
to access aliases introduced in IsExpression's in the template's 
constraints.