gpt4 book ai didi

c++ - GCC 中的通用 lambda

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:09:33 24 4
gpt4 key购买 nike

Disclaimer: Do not use the code in this question. It invokes undefined behaviour. The core statement of the question, why GCC struggles with type deduction, remains valid.

我使用以下技巧通过捕获获取指向 lambda 的函数指针(另请参见 this question)。该代码使用 Clang 编译,但不使用 GCC。我的代码是非标准的还是 GCC 中的错误?

template < typename F >
decltype(auto) get_ptr(F f)
{
static auto proxy = f;
return [] (auto ... args) { return proxy(args...); };
}

double test()
{
double a = 5;
auto f = [&a](double x) { return a*x; };

double(*p)(double) = get_ptr(f);

return p(1);
}

Godbolt 示例:https://godbolt.org/g/3qWdMH

最佳答案

诡计被打破了。考虑:

double test(double a)
{
auto f = [&a](double x) { return a*x; };

double(*p)(double) = get_ptr(f);

return p(1);
}

int main() {
test(5); // ok, 5
test(6); // UB, captured reference to `a` is now dangling, or, if captured by value, will return 5 when it should be 6
}

关于c++ - GCC 中的通用 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43971127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com