我正在 Jason Turner 的youtube 频道上学习关于 c++17 的可变参数模板,然后我复制了他的示例代码(如下所示)。在他的视频中,他使用了带有 gcc 7的网站godbolt.org 。
#include <utility>
template<typename ... B>
struct Merged : B ... {
template<typename ... T>
Merged(T&& ... t) : B(std::forward<T>(t))... {}
using B::operator()...;
};
template<typename ... T>
Merged(T...) -> Merged<std::decay_t<T>...>;
int main() {
const auto l1 = []() { return 4; };
const auto l2 = [](const int i) { return i * 10; };
Merged merged(l1,
l2,
[](const double d) { return d * 3.2; });
return 0;
}
我使用 gcc 9.2 在我的计算机上尝试了代码,但出现以下错误:
在 'Merged::Merged(T&& ...) 的实例化中(使用 T = {const main()::&, const main()::&, main()::}; B = {}]':
我尝试使用 Godbolt 站点进行检查,但它也无法编译(使用 gcc 7.1 和 gcc 9.2)并给出更多错误,例如:
错误:在“合并”之前缺少模板参数合并合并(l1,
和
错误: ')' 标记 [](const double d) { return d * 3.2; 之前的预期主表达式;});
这个错误是什么意思,我需要做些什么来修复它?
在我的电脑中编译行:
g++ -Wall -fexceptions -O2 -pedantic -Wextra -Wall -std=c++1z -m64 -c /home/thearquitect/Desktop/C++/variadic.cpp -o ~/Desktop/obj/variadic.o
g++ -o ~/Desktop/bin/variadic ~/Desktop/obj/variadic.o -s -m64