diff options
author | Ryoga <ryoga_314@yahoo.co.jp> | 2019-07-10 06:50:06 +0900 |
---|---|---|
committer | Alon Zakai <azakai@google.com> | 2019-07-09 14:50:06 -0700 |
commit | 03a883356bd3aba53b2dfadb424d53b1db04a842 (patch) | |
tree | 231b80cef3aac200bfaec9765c705db4ee04f0a4 | |
parent | cbca5a29865e93ba543d1ede1b13bcc8f32bc1fd (diff) | |
download | binaryen-03a883356bd3aba53b2dfadb424d53b1db04a842.tar.gz binaryen-03a883356bd3aba53b2dfadb424d53b1db04a842.tar.bz2 binaryen-03a883356bd3aba53b2dfadb424d53b1db04a842.zip |
Allows multiple arguments to be passed to PassRunner::add<T>() (#2208)
struct FooPass : public wasm::Pass {
FooPass(int a, int b);
};
PassRunner runner {module};
runner.add<FooPass>(1, 2); // To allow this
This change avoids unnecessary copying and allows us to pass the reference without reference_wrapper.
struct BarPass : public wasm::Pass {
BarPass(std::ostream& s);
};
runner.add<BarPass>(std::cout); // Error (cout is uncopyable)
runner.add<BarPass>(std::ref(std::cout)); // OK
↓
runner.add<BarPass>(std::cout); // OK (passed by reference)
runner.add<BarPass>(std::ref(std::cout)); // OK
-rw-r--r-- | src/pass.h | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/pass.h b/src/pass.h index 0a9cc251f..5c1315844 100644 --- a/src/pass.h +++ b/src/pass.h @@ -171,9 +171,9 @@ struct PassRunner { doAdd(pass); } - template<class P> void add() { doAdd(new P()); } - - template<class P, class Arg> void add(Arg arg) { doAdd(new P(arg)); } + template<class P, class... Args> void add(Args&&... args) { + doAdd(new P(std::forward<Args>(args)...)); + } // Adds the default set of optimization passes; this is // what -O does. |