Skip to content

Commit 8ef5ba7

Browse files
Support main callback with ref parameter
1 parent ee69ce3 commit 8ef5ba7

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

source/argparse/api/cli.d

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ template CLI(Config config, COMMAND)
122122
}
123123

124124
static int parseArgs(alias newMain)(string[] args, COMMAND initialValue = COMMAND.init)
125-
if(__traits(compiles, { newMain(COMMAND.init); }))
125+
if(__traits(compiles, { newMain(initialValue); }))
126126
{
127127
alias value = initialValue;
128128

@@ -140,7 +140,7 @@ template CLI(Config config, COMMAND)
140140
}
141141

142142
static int parseArgs(alias newMain)(string[] args, COMMAND initialValue = COMMAND.init)
143-
if(__traits(compiles, { newMain(COMMAND.init, string[].init); }))
143+
if(__traits(compiles, { newMain(initialValue, string[].init); }))
144144
{
145145
alias value = initialValue;
146146

@@ -205,11 +205,20 @@ alias CLI(COMMANDS...) = CLI!(Config.init, COMMANDS);
205205

206206
unittest
207207
{
208+
// Ensure that CLI.main is compilable
208209
struct Args {}
209210

210-
mixin CLI!({
211-
Config cfg;
212-
cfg.errorHandler = (string s) {};
213-
return cfg;
214-
}(), Args).main!((_){});
211+
enum Config cfg = { errorHandler: (string s) {} };
212+
213+
mixin CLI!(cfg, Args).main!((_){});
214+
}
215+
216+
unittest
217+
{
218+
// Ensure that CLI.main is compilable with reference parameter in callback
219+
struct Args {}
220+
221+
enum Config cfg = { errorHandler: (string s) {} };
222+
223+
mixin CLI!(cfg, Args).main!((ref _){});
215224
}

0 commit comments

Comments
 (0)