http://d.puremagic.com/issues/show_bug.cgi?id=8106
--- Comment #14 from Kenji Hara <k.hara...@gmail.com> 2012-06-14 18:39:37 PDT --- Now, this small utility works as expected. /* */ template ParameterDefaultValueTuple(alias func) { alias ParameterTypeTuple!func PT; template DefArg(size_t i) { enum get = (PT[i..i+1] args) => args[0]; static if (is(typeof(get()))) enum DefArg = get(); else alias void DefArg; // If default arg doesn't exist, returns void instead. } template Impl(size_t i = 0) { static if (i == PT.length) alias TypeTuple!() Impl; else alias TypeTuple!(DefArg!(i), Impl!(i+1)) Impl; } alias Impl!() ParameterDefaultValueTuple; } unittest { void foo(int n = 1, string s = "hello"){} //pragma(msg, ParameterDefaultValueTuple!foo); static assert(ParameterDefaultValueTuple!foo.length == 2); static assert(ParameterDefaultValueTuple!foo[0] == 1); static assert(ParameterDefaultValueTuple!foo[1] == "hello"); static assert(is(typeof(ParameterDefaultValueTuple!foo) == typeof(TypeTuple!(1, "hello")))); void bar(int x, int n = 1, string s = "hello"){} //pragma(msg, ParameterDefaultValueTuple!bar); static assert(ParameterDefaultValueTuple!bar.length == 3); static assert(is(ParameterDefaultValueTuple!bar[0] == void)); static assert( ParameterDefaultValueTuple!bar[1] == 1); static assert( ParameterDefaultValueTuple!bar[2] == "hello"); static assert(is(typeof(ParameterDefaultValueTuple!bar) == typeof(TypeTuple!(void, 1, "hello")))); struct Colour { ubyte a,r,g,b; immutable Colour white = Colour(255,255,255,255); } void bug8106(Colour c = Colour.white){} //pragma(msg, ParameterDefaultValueTuple!bug8106); static assert(ParameterDefaultValueTuple!bug8106[0] == Colour.white); } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------