我试图回复another answer,而在玩羊羔和继承时发现了一些困难.
考虑以下几个最小例子:
template<typename Func>struct Base: Func { Base(Func func): Func{func} {} template<typename... Args> auto operator()(Args... args) -> decltype(Func::operator()(args...),voID()) { Func::operator()(args...); }};int main() { auto l = [](auto &&) {}; Base<decltype(l)> mixin{l}; mixin(0);}
GCC 6.1 compiles it,clang 4.0 crashes.
注意,使用以下定义,两个编译都很好:
auto l = [](int) {};
这个有效的代码是否正在做标准不允许的事情?
Here是我刚刚打开的问题的链接.
解决方法 只要你需要一个解决方案的clang – 以下代码应该与clang配合使用#include <utility>#include <iostream>template <typename F>struct Base : F{ Base (F f) : F {f} {} template <typename... Args> decltype(auto) operator () (Args&&... args) { std::cout << "("; F::operator () (std::forward<Args> (args)...); std::cout << ")" << std::endl; }};intmain (){ auto l = [] (auto && i) { std::cout << i; }; Base<decltype(l)> mixin {l}; mixin (0); return 0;}总结
以上是内存溢出为你收集整理的c – 通用的lambda,继承和尾随返回类型:这个有效的代码?全部内容,希望文章能够帮你解决c – 通用的lambda,继承和尾随返回类型:这个有效的代码?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)