mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 13:10:12 +03:00
31 lines
676 B
D
31 lines
676 B
D
// https://issues.dlang.org/show_bug.cgi?id=15711
|
|
|
|
struct Quu {
|
|
string val;
|
|
}
|
|
|
|
string[] result = foo!(0, [Quu(['z']), Quu("")]);
|
|
|
|
template foo(size_t i, Quu[] data, string[] results = []) {
|
|
static if (i < data.length) {
|
|
enum def = data[i];
|
|
enum foo = foo!(i+1, data, results ~ def.val);
|
|
}
|
|
else {
|
|
enum foo = results;
|
|
}
|
|
}
|
|
|
|
// Run-time version already works
|
|
|
|
string[] result_rt = foo_rt(0, [Quu(['z']), Quu("")]);
|
|
|
|
string[] foo_rt(size_t i, Quu[] data, string[] results = []) {
|
|
if (i < data.length) {
|
|
auto def = data[i];
|
|
return foo_rt(i+1, data, results ~ def.val);
|
|
}
|
|
else {
|
|
return results;
|
|
}
|
|
}
|