Вот минимальный воспроизводимый пример:
#include
#include
template
void addElement(std::vector& vec, T&& value) {
// Try to use emplace to add the element
vec.emplace(vec.end(), std::forward(value));
}
int main() {
std::vector numbers;
addElement(numbers, 42);
for(const auto& num : numbers) {
std::cout
Код: Выделить всё
:5:39: error: expected ',' or '...' before '&&' token
void addElement(std::vector& vec, T&& value) {
^
: In function 'void addElement(std::vector&, T)':
:7:28: error: 'forward' is not a member of 'std'
vec.emplace(vec.end(), std::forward(value));
^
:7:42: error: expected primary-expression before '>' token
vec.emplace(vec.end(), std::forward(value));
^
:7:44: error: 'value' was not declared in this scope
vec.emplace(vec.end(), std::forward(value));
^
: In function 'int main()':
:14:21: error: ISO C++ forbids declaration of 'num' with no type [-fpermissive]
for(const auto& num : numbers) {
^
:14:27: error: range-based 'for' loops are not allowed in C++98 mode
for(const auto& num : numbers) {
^
: In instantiation of 'void addElement(std::vector&, T) [with T = int]':
:12:27: required from here
:7:5: error: 'class std::vector' has no member named 'emplace'
vec.emplace(vec.end(), std::forward(value));
^
Я попытался использовать emplace_back < /code> вместо этого, который работал: < /p>
< /li>
< /ol>
Код: Выделить всё
vec.emplace_back(std::forward(value));
< /code>
Я также попытался добавить флаг C ++ 11 при составлении: < /li>
< /ol>
g++ -std=c++11 main.cpp -o main
Подробнее здесь: https://stackoverflow.com/questions/796 ... template-f