On Monday, 1 July 2013 at 04:19:51 UTC, Timon Gehr wrote:
On 07/01/2013 05:44 AM, JS wrote:
On Monday, 1 July 2013 at 01:56:22 UTC, Timon Gehr wrote:
...
The described strategy can easily result in non-termination, and which
template instantiations it performs can be non-obvious.

auto foo(T)(T arg){
   static if(is(T==int)) return 1.0;
   else return 1;
}

void main(){
   auto x;
   x = 1;
   x = foo(x);
}

Sorry,

That's fine.

it only results in non-termination if you don't check all return
types out of a function.

Why is this relevant? I was specifically responding to the method lined out in the post I was answering. There have not been any other attempts to formalize the proposal so far.

It is a rather easy case to handle by just
following all the return types and choosing the largest one.

That neither handles the above case in a sensible way nor is it a solution for the general issue. (Hint: D's type system is Turing complete.)

No big deal...  any other tries?

That's not how it goes. The proposed inference method has to be completely specified for all instances, not only for those instances that I can be bothered to provide to you as counterexamples.

well duh, but it is quite a simple mathematical problem and your counter-example is not one at all.

For a statically typed language all types must be known at compile time... so you can't come up with any valid counter-example. Just because you come up with some convoluted example that seems to break the algorithm does not prove anything.

Do you agree that a function's return type must be known at compile time in a statically typed language? If not then we have nothing more to discuss... (Just because you allow a function to be compile time polymorphic doesn't change anything because each type that a function can possibly return must be known)

Reply via email to