digitalmars.D.learn - Problem with CTFE
- Sean Kelly <sean f4.ca> Dec 18 2007
- "Jarrett Billingsley" <kb3ctd2 yahoo.com> Dec 18 2007
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








"Jarrett Billingsley" <kb3ctd2 yahoo.com>