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 603 bool parsed{false};
604 604 App* subcommand = nullptr;
605 605  
606   - std::function<void(App*)> app_callback;
  606 + std::function<void()> app_callback;
607 607  
608 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 614 App* set_callback(std::function<void()> callback) {
617   - app_callback = [callback](App*){callback();};
  615 + app_callback = callback;
618 616 return this;
619 617 }
620 618  
621 619 void run_callback() {
622 620 if(app_callback)
623   - app_callback(this);
  621 + app_callback();
624 622 }
625 623  
626 624 /// Reset the parsed data
... ...
tests/CLITest.cpp
... ... @@ -383,7 +383,7 @@ TEST_F(TApp, BasicSubcommands) {
383 383  
384 384 TEST_F(TApp, Callbacks) {
385 385 auto sub1 = app.add_subcommand("sub1");
386   - sub1->set_callback([](CLI::App*){
  386 + sub1->set_callback([](){
387 387 throw CLI::Success();
388 388 });
389 389 auto sub2 = app.add_subcommand("sub2");
... ...