@@ -374,6 +374,102 @@ def test_install_with_args_success(self):
374374 '''
375375 expect_success (COMMON_DEFINITIONS , source )
376376
377+ def test_install_with_args_too_few_passed (self ):
378+ source = '''
379+ fruit::Component<> getParentComponent(int n, bool b) {
380+ (void)n;
381+ (void)b;
382+ return fruit::createComponent();
383+ }
384+
385+ fruit::Component<> getComponent() {
386+ return fruit::createComponent()
387+ .install(getParentComponent, 5);
388+ }
389+
390+ int main() {
391+ fruit::Injector<> injector(getComponent);
392+ }
393+ '''
394+ expect_generic_compile_error (
395+ # Clang
396+ 'pack expansion contains parameter packs .FormalArgs. and .Args. that have different lengths \\ (2 vs. 1\\ )'
397+ # GCC
398+ '|mismatched argument pack lengths while expanding .checkAcceptableComponentInstallArg<FormalArgs, Args>().' ,
399+ COMMON_DEFINITIONS ,
400+ source )
401+
402+ def test_install_with_args_too_many_passed (self ):
403+ source = '''
404+ fruit::Component<> getParentComponent(int n) {
405+ (void)n;
406+ return fruit::createComponent();
407+ }
408+
409+ fruit::Component<> getComponent() {
410+ return fruit::createComponent()
411+ .install(getParentComponent, 5, true);
412+ }
413+
414+ int main() {
415+ fruit::Injector<> injector(getComponent);
416+ }
417+ '''
418+ expect_generic_compile_error (
419+ # Clang
420+ 'pack expansion contains parameter packs .FormalArgs. and .Args. that have different lengths \\ (1 vs. 2\\ )'
421+ # GCC
422+ '|mismatched argument pack lengths while expanding .checkAcceptableComponentInstallArg<FormalArgs, Args>().' ,
423+ COMMON_DEFINITIONS ,
424+ source )
425+
426+ def test_install_with_args_none_passed (self ):
427+ source = '''
428+ fruit::Component<> getParentComponent(int n) {
429+ (void)n;
430+ return fruit::createComponent();
431+ }
432+
433+ fruit::Component<> getComponent() {
434+ return fruit::createComponent()
435+ .install(getParentComponent);
436+ }
437+
438+ int main() {
439+ fruit::Injector<> injector(getComponent);
440+ }
441+ '''
442+ expect_generic_compile_error (
443+ # Clang
444+ 'pack expansion contains parameter packs .FormalArgs. and .Args. that have different lengths \\ (1 vs. 0\\ )'
445+ # GCC
446+ '|mismatched argument pack lengths while expanding .checkAcceptableComponentInstallArg<FormalArgs, Args>().' ,
447+ COMMON_DEFINITIONS ,
448+ source )
449+
450+ def test_install_without_args_but_some_passed (self ):
451+ source = '''
452+ fruit::Component<> getParentComponent() {
453+ return fruit::createComponent();
454+ }
455+
456+ fruit::Component<> getComponent() {
457+ return fruit::createComponent()
458+ .install(getParentComponent, 5);
459+ }
460+
461+ int main() {
462+ fruit::Injector<> injector(getComponent);
463+ }
464+ '''
465+ expect_generic_compile_error (
466+ # Clang
467+ 'pack expansion contains parameter packs .FormalArgs. and .Args. that have different lengths \\ (0 vs. 1\\ )'
468+ # GCC
469+ '|mismatched argument pack lengths while expanding .checkAcceptableComponentInstallArg<FormalArgs, Args>().' ,
470+ COMMON_DEFINITIONS ,
471+ source )
472+
377473 def test_install_with_args_error_not_move_constructible (self ):
378474 source = '''
379475 struct Arg {
0 commit comments