これが私が書いた可変個引数テンプレート関数です:
template<class Container, class Value, class... Args>
Value& insert(Container& c, Args&&... args) {
c.emplace_back(args);
return c.back();
}
このようにinsert
を使用すると、エラーが発生します。
list<int> lst;
int& num = insert<list<int>, int, int>(lst, 4);
エラーは、insert
の本文のこの行について文句を言います。
c.emplace_back(args); // <= 'args' : parameter pack must be
// expanded in this context
それはどういう意味ですか、どうすれば修正できますか?
このエラーは、(パラメーターパックではなく)すべての個々のパラメーターを...
に渡すときに、args
の後に省略記号(emplace_back
)がないことが原因です。
修正された(そして改善された)バージョン:
template<class Container, class... Args>
auto insert(Container& c, Args&&... args) -> decltype (c.back()) {
c.emplace_back(std::forward<Args>(args)...);
return c.back();
}