C ++ 17折叠表达式未编译

时间:2018-11-16 23:11:47

标签: c++ c++17

第一次发布,如果格式不佳,抱歉。前几天,我第一次遇到折叠表达式,并且正在尝试使用它们。但是,我所有的尝试都未能编译。我将其归结为以下内容:

//test.cpp

template<typename... types>
auto adder(types&... args){
    return (args+...);
}

int main(){return 0;}

然后我用

进行了编译
g++ -std=c++17 test.cpp

它会产生以下错误:

testCode.cpp: In function 'auto adder(types& ...)':
testCode.cpp:5:15: error: expected primary-expression before '...' token
  return (args+...);
               ^
testCode.cpp:5:15: error: expected ')' before '...' token
testCode.cpp:5:18: error: parameter packs not expanded with '...':
  return (args+...);
                  ^
testCode.cpp:5:18: note:         'args'

从我所看到的一切来看,这应该是可行的,因此,如果有人可以告诉我我在做什么错,我将不胜感激。

我正在使用xenial linux(在chrome OS上为crouton)和全新安装的g ++。

2 个答案:

答案 0 :(得分:0)

也许是这样吗?

#include <string>
#include <iostream>

using namespace std::literals;

template<typename... T>
auto add(const T&... args) {
        return (args + ...);
}

int main() {
        std::cout << add(1,2,3,4) << "\n";
        std::cout << add("a"s, "b"s, "c"s) << "\n";
        return 0;
}

答案 1 :(得分:0)

正如Kenzel在评论中所怀疑的那样,这是g ++编译器的版本控制问题。不确定默认情况下我的计算机正在安装什么,但是转到linux系统信息库并手动安装更新版本的g ++解决了该问题。谢谢大家的帮助!