Menu
Home
Create new Paste
Log in
Code
Theme: cobalt
Theme: eclipse
Theme: elegant
Theme: monokai
Theme: neat
Theme: night
Theme: rubyblue
import std.typetuple; import std.typecons; import std.stdio; private template filterWithNum(alias F, int N, T...) { static if (T.length == 0) alias TypeTuple!() filterWithNum; else { static if (F!(N, T[0])) alias TypeTuple!(T[0], filterWithNum!(F, N+1, T[1 .. $])) filterWithNum; else alias filterWithNum!(F, N+1, T[1 .. $]) filterWithNum; } } template filter(alias F, T...) { static if (T.length == 0) alias TypeTuple!() filter; else static if (is(typeof(F!(0,T[0]) == true))) { alias filterWithNum!(F,0,T) filter; } else static if (is(typeof(F!(T[0])))) { static if (F!(T[0])) alias TypeTuple!(T[0], filter!(F, T[1 .. $])) filter; else alias filter!(F, T[1 .. $]) filter; } else { static assert(0, "Wrong predicate supplied"); } } template even( int N, alias T ) { enum bool even = ! (N % 2); } template even2( alias T ) { static if (!is(typeof(!(T % 2)))) enum bool even2 = false; else enum bool even2 = ! (T % 2); } void main() { alias TypeTuple!( 1, "lalalal", 4, 5, 6 ) args; writeln(tuple( filter!(even, args) )); writeln(tuple( filter!(even2, args) )); }
Result:
Success
/
Return code: 0
/
Compilation time:
0.401
seconds
/
Run time:
0.023
seconds
Disassembly
Application output:
Tuple!(int,int,int)(1, 4, 6)
Tuple!(int,int)(4, 6)
Username
Message
Add comment
Paste info
Author:
Guest
Views:
169
Private:
no
Expires:
Never
Uploaded:
18.06.12 23:35
Votes
:
0
Tweet
Compilation
Compiler:
DMD 2.062
Pointer size:
m64
Actions
Download
Fork
Raw
×
Confirm
Are you sure you want to delete this paste?
There's no way back!
×
Confirm
Reason