c – 通用的lambda,继承和尾随返回类型:这个有效的代码?
发布时间:2020-12-16 06:03:04 所属栏目:百科 来源:网络整理
导读:注意:我打开了一个问题,但我想确保我的代码也是有效的. 我试图回复another answer,而在玩羊羔和继承时发现了一些困难. 考虑以下几个最小例子: templatetypename Funcstruct Base: Func { Base(Func func): Func{func} {} templatetypename... Args auto op
注意:我打开了一个问题,但我想确保我的代码也是有效的.
我试图回复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; } }; int main () { auto l = [] (auto && i) { std::cout << i; }; Base<decltype(l)> mixin {l}; mixin (0); return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |