Commit 955dd950f0607b0c85cdaf82391235b6710c999c

Authored by Henry Fredrick Schreiner
1 parent 8b224fa7

C++11 compliance on older compilers

include/CLI.hpp
@@ -603,24 +603,22 @@ protected: @@ -603,24 +603,22 @@ protected:
603 bool parsed{false}; 603 bool parsed{false};
604 App* subcommand = nullptr; 604 App* subcommand = nullptr;
605 605
606 - std::function<void(App*)> app_callback; 606 + std::function<void()> app_callback;
607 607
608 public: 608 public:
609 - /// Set a callback to run at the end of parsing  
610 - App* set_callback(std::function<void(App*)> callback) {  
611 - app_callback = callback;  
612 - return this;  
613 - }  
614 609
615 - /// Don't have to worry about explicit App* in argument 610 + /// Set a callback for the end of parsing. Due to a bug in c++11,
  611 + /// it is not possible to overload on std::function (fixed in c++14
  612 + /// and backported to c++11 on newer compilers). Use capture by reference
  613 + /// to get a pointer to App if needed.
616 App* set_callback(std::function<void()> callback) { 614 App* set_callback(std::function<void()> callback) {
617 - app_callback = [callback](App*){callback();}; 615 + app_callback = callback;
618 return this; 616 return this;
619 } 617 }
620 618
621 void run_callback() { 619 void run_callback() {
622 if(app_callback) 620 if(app_callback)
623 - app_callback(this); 621 + app_callback();
624 } 622 }
625 623
626 /// Reset the parsed data 624 /// Reset the parsed data
tests/CLITest.cpp
@@ -383,7 +383,7 @@ TEST_F(TApp, BasicSubcommands) { @@ -383,7 +383,7 @@ TEST_F(TApp, BasicSubcommands) {
383 383
384 TEST_F(TApp, Callbacks) { 384 TEST_F(TApp, Callbacks) {
385 auto sub1 = app.add_subcommand("sub1"); 385 auto sub1 = app.add_subcommand("sub1");
386 - sub1->set_callback([](CLI::App*){ 386 + sub1->set_callback([](){
387 throw CLI::Success(); 387 throw CLI::Success();
388 }); 388 });
389 auto sub2 = app.add_subcommand("sub2"); 389 auto sub2 = app.add_subcommand("sub2");