diff options
author | Ben Smith <binjimin@gmail.com> | 2017-07-19 09:22:51 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-19 09:22:51 -0700 |
commit | 028701aa7a80320d5e5a6e1d69b52cd940d402ea (patch) | |
tree | 1a7b6922207fc026d66e975fcda10e6712a11431 /src | |
parent | a2d15d2cd095d6915cc83cbd811be8488ca0fce6 (diff) | |
download | wabt-028701aa7a80320d5e5a6e1d69b52cd940d402ea.tar.gz wabt-028701aa7a80320d5e5a6e1d69b52cd940d402ea.tar.bz2 wabt-028701aa7a80320d5e5a6e1d69b52cd940d402ea.zip |
Properly forward argument packs (#578)
The pattern should be
```
template <typename... Args>
void foo(Args&&... args) {
bar(std::forward<Args>(args)...);
}
```
Diffstat (limited to 'src')
-rw-r--r-- | src/common.h | 4 | ||||
-rw-r--r-- | src/interpreter.h | 16 | ||||
-rw-r--r-- | src/intrusive-list.h | 6 | ||||
-rw-r--r-- | src/tracing.h | 4 |
4 files changed, 15 insertions, 15 deletions
diff --git a/src/common.h b/src/common.h index e728d5ab..a057f0bc 100644 --- a/src/common.h +++ b/src/common.h @@ -109,8 +109,8 @@ void ZeroMemory(T& v) { // Placement construct template <typename T, typename... Args> -void Construct(T& placement, Args... args) { - new (&placement) T(args...); +void Construct(T& placement, Args&&... args) { + new (&placement) T(std::forward<Args>(args)...); } // Placement destruct diff --git a/src/interpreter.h b/src/interpreter.h index 5815a334..1b91f5a1 100644 --- a/src/interpreter.h +++ b/src/interpreter.h @@ -381,48 +381,48 @@ class Environment { template <typename... Args> FuncSignature* EmplaceBackFuncSignature(Args&&... args) { - sigs_.emplace_back(args...); + sigs_.emplace_back(std::forward<Args>(args)...); return &sigs_.back(); } template <typename... Args> Func* EmplaceBackFunc(Args&&... args) { - funcs_.emplace_back(args...); + funcs_.emplace_back(std::forward<Args>(args)...); return funcs_.back().get(); } template <typename... Args> Global* EmplaceBackGlobal(Args&&... args) { - globals_.emplace_back(args...); + globals_.emplace_back(std::forward<Args>(args)...); return &globals_.back(); } template <typename... Args> Table* EmplaceBackTable(Args&&... args) { - tables_.emplace_back(args...); + tables_.emplace_back(std::forward<Args>(args)...); return &tables_.back(); } template <typename... Args> Memory* EmplaceBackMemory(Args&&... args) { - memories_.emplace_back(args...); + memories_.emplace_back(std::forward<Args>(args)...); return &memories_.back(); } template <typename... Args> Module* EmplaceBackModule(Args&&... args) { - modules_.emplace_back(args...); + modules_.emplace_back(std::forward<Args>(args)...); return modules_.back().get(); } template <typename... Args> void EmplaceModuleBinding(Args&&... args) { - module_bindings_.emplace(args...); + module_bindings_.emplace(std::forward<Args>(args)...); } template <typename... Args> void EmplaceRegisteredModuleBinding(Args&&... args) { - registered_module_bindings_.emplace(args...); + registered_module_bindings_.emplace(std::forward<Args>(args)...); } HostModule* AppendHostModule(string_view name); diff --git a/src/intrusive-list.h b/src/intrusive-list.h index 290a0483..403442f4 100644 --- a/src/intrusive-list.h +++ b/src/intrusive-list.h @@ -410,13 +410,13 @@ inline typename intrusive_list<T>::const_reference intrusive_list<T>::back() template <typename T> template <class... Args> inline void intrusive_list<T>::emplace_front(Args&&... args) { - push_front(new T(args...)); + push_front(new T(std::forward<Args>(args)...)); } template <typename T> template <class... Args> inline void intrusive_list<T>::emplace_back(Args&&... args) { - push_back(new T(args...)); + push_back(new T(std::forward<Args>(args)...)); } template <typename T> @@ -504,7 +504,7 @@ template <class... Args> inline typename intrusive_list<T>::iterator intrusive_list<T>::emplace( iterator pos, Args&&... args) { - return insert(pos, new T(args...)); + return insert(pos, new T(std::forward<Args>(args)...)); } template <typename T> diff --git a/src/tracing.h b/src/tracing.h index f1e741c5..dce1b89a 100644 --- a/src/tracing.h +++ b/src/tracing.h @@ -42,10 +42,10 @@ struct TraceScope { TraceScope() = delete; TraceScope(const char* method); template<typename... Args> - TraceScope(const char* method, const char* format, Args... args) + TraceScope(const char* method, const char* format, Args&&... args) : method_(method) { PrintEnter(method); - fprintf(stderr, format, args...); + fprintf(stderr, format, std::forward<Args>(args)...); PrintNewline(); } ~TraceScope(); |