D's treatment of values versus side-effect free nullary functions
    Rainer Deyke 
    rainerd at eldwood.com
       
    Mon Jul 26 00:47:58 PDT 2010
    
    
  
On 7/25/2010 13:41, Jim Balter wrote:
> But there are
> (at least) two problems: 1) you can't be certain that the code will be
> run at run time at all -- in generic code you could easily have function
> invocations with constant values that would fail in various ways but the
> function is never run with those values because of prior tests.
That's a good point - but at the same time, I'm having trouble thinking
of any sensible example where this would be an issue.  It would require
at all of the following factors:
  - The function itself is a candidate for CTFE.
  - The arguments to the function can be evaluated at compile time, but
are not simple constants (i.e. they depend on template parameters).
  - The code that calls the function depends on run-time parameters.
  - The function is never called with parameters that prevent it from
terminating, but the compiler is unable to determine that this is the case.
Something like this would work, I guess, but it's horribly contrived:
int terminate_if_nonzero(int i) {
  return (i != 0) ? i : terminate_if_nonzero(i);
}
void f(int i)(bool call_it) {
  if (call_it) terminate_if_nonzero(i);
}
bool get_input_and_return_false() {
  // This function is not a CTFE candidate because it performs I/O.
  read_input();
  return false;
}
void main() {
  f!(0)(get_input_and_return_false());
}
-- 
Rainer Deyke - rainerd at eldwood.com
    
    
More information about the Digitalmars-d
mailing list