On 9/3/22 8:09 AM, Salih Dincer wrote:
Hi All,

We discovered a bug yesterday and reported it:

https://forum.dlang.org/thread/mailman.1386.1662137084.31357.digitalmars-d-b...@puremagic.com

You know, there is `generate()` depend to `std.range`. It created the error when we use it with the value of an enum. Which get their values from an `enum DNA`, we have 4 members that we want to generate 32 pieces randomly like this:

```d
import std;
void main()
{
   enum DNA { timin = 84,
              sitozin = 67,
              guanin = 71,
              adenin = 65
            }
   char[] gene;
   enum n = 32;
   auto range = generate!(() => uniform(DNA.min, DNA.max)).take(n);/*
   auto preferred = generate!(() =>
                    uniform!"[]"(DNA.min,
                                 DNA.max)).take(n);//*/

I'm not sure why this doesn't work. First, I would change your enum to this (for correctness and readability):

```d
  enum DNA : char { timin = 'T',
             sitozin = 'C',
             guanin = 'G',
             adenin = 'A'
           }
```

There is probably a bug in generate when the element type is an `enum` which somehow makes it const. But what you need anyway is a `char`, so just return a `char`. For that, you need to specify the return type, which requires a different kind of function literal:

```d
   auto preferred = generate!(function char() =>
                    uniform!"[]"(DNA.min,
                                 DNA.max)).take(n);
```

That works.

-Steve

Reply via email to