December 18, 2007 Problem with CTFE | ||||
---|---|---|---|---|
| ||||
Can someone tell me why compiling with version=Good works, but compiling with version=Bad fails? version( Good ) { size_t find(Elem)( Elem[] buf, Elem pat ) { for( size_t pos = 0; pos < buf.length; ++pos ) { if( buf[pos] == pat ) return pos; } return buf.length; } } else version( Bad ) { size_t find(Buf, Pat)( Buf buf, Pat pat ) { return 0; } } const pos = find( "abcdefg", 'c' ); void main() { } |
December 18, 2007 Re: Problem with CTFE | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sean Kelly | "Sean Kelly" <sean@f4.ca> wrote in message news:fk98ve$2mgq$1@digitalmars.com... > Can someone tell me why compiling with version=Good works, but compiling with version=Bad fails? > > version( Good ) > { > size_t find(Elem)( Elem[] buf, Elem pat ) > { > for( size_t pos = 0; pos < buf.length; ++pos ) > { > if( buf[pos] == pat ) > return pos; > } > return buf.length; > } > } > else version( Bad ) > { > size_t find(Buf, Pat)( Buf buf, Pat pat ) > { > return 0; > } > } > > const pos = find( "abcdefg", 'c' ); > > void main() > { > > } Seems like a bug to me. Using the Bad version in a non-constant context works fine. Using the Bad version with explicitly-specified types in a constant context also works fine. Maybe some kind of ordering bug in the compiler; it doesn't deduce the two types before it tries to evaluate it or something. |
Copyright © 1999-2021 by the D Language Foundation