http://d.puremagic.com/issues/show_bug.cgi?id=9130
--- Comment #2 from Max Samukha <[email protected]> 2012-12-10 08:30:45 PST --- (In reply to comment #1) > It happens because of invalid usage of traits. If spec is right, getOverloads > works with classes and even if it does work with structs, dmd complains "need > 'this' for bar type void()" Sorry, it is a valid usage. There should be no restrictions on the kind of overloaded functions passed to getOverloads. > > struct S > { > void bar() { } > } > > void meta(alias m) () > { > // insert some usage of m here > // to force dmd to reject code > } > > void main() > { > //Error: need 'this' for bar type void() > //auto x = __traits(getOverloads, S, "bar")[0]; Sure, calling a member function without a context pointer will and should produce an error. Passing it to a template, storing in a tuple, getting its type, static address and other meta-data are valid operations and should be allowed. > //But template silently 'eats' erroneous construct > meta!(__traits(getOverloads, S, "bar")[0]); > } > > In your code if you comment out "meta!(__traits(getOverloads, S, "bar")[0]);" > everything would work fine. I need to use getOverloads. BTW, if you change S to a class and mark bar() static you will get the same segfault. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
