digitalmars.D.learn - Problem with CTFE
- Sean Kelly (25/25) Dec 18 2007 Can someone tell me why compiling with version=Good works, but compiling...
- Jarrett Billingsley (7/32) Dec 18 2007 Seems like a bug to me. Using the Bad version in a non-constant context...
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() { }
Dec 18 2007
"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.
Dec 18 2007