Tuples, CTFE, and Sliding Template Arguments

Richard (Rikki) Andrew Cattermole richard at cattermole.co.nz
Sun Jan 14 08:26:10 UTC 2024


On 14/01/2024 9:23 PM, Richard (Rikki) Andrew Cattermole wrote:
> auto execi(FormatString fmt, Args...)(Sqlite db, Args args) { enum query 
> = () { string ret; static foreach(i; 0 .. Args.length) { foreach(prefix; 
> __traits(getAttributes, args[i], IPrefix)) { ret ~= prefix.value; } ret 
> ~= "?"; ret ~= i.text; } return ret; }(); auto statement = Statement(db, 
> query); static foreach (i, arg; args) statement.bind(i + 1, arg); return 
> statement.execute(); }

Ugh oops, left in the FormatString template parameter.

Should be:

```d
auto execi(Args...)(Sqlite db, Args args) {
     enum query = () {
         string ret;

         static foreach(i; 0 .. Args.length) {
             foreach(prefix; __traits(getAttributes, args[i], IPrefix)) {
                 ret ~= prefix.value;
             }
             ret ~= "?";
             ret ~= i.text;
         }

         return ret;
     }();

     auto statement = Statement(db, query);
     static foreach (i, arg; args)
         statement.bind(i + 1, arg);
     return statement.execute();
}
```


More information about the Digitalmars-d mailing list