On Sat, Jul 26, 2014 at 05:14:44PM +0000, via Digitalmars-d-learn wrote: > Hmmm... thinking about it, is this possible? > > 1. Remove the constraints to match anything. > 2. Inside the template, have some construct that enumerates all possible > overloads and UFCS functions that are visible at the point of instantiation. > 3. If this set contains only the current template, use a static assert > to print the message. > 4. Otherwise, make the template fail to compile somehow (for example, > evaluate a semantically invalid expression), and hope that the > compiler will then take the other overloads into consideration > (SFINAE). > > Could this work?
D does not have SFINAE. This has been discussed before. I proposed the following solution: - Sig constraints should match all types that the function *logically* accepts -- even if the current implementation does not support some of said types. - In the function body, use a `static if` chain to implement specializations. - In the final else clause, do a static assert(0) with a user-friendly error message. T -- In order to understand recursion you must first understand recursion.