繁体   English   中英

可能是C ++ 14多态Lambda出现GCC错误?

[英]Possible gcc bug with C++14 polymorphic lambdas?

我发现使用多态C ++ 14 lambda(它们的参数中带有auto lambda)的行为很奇怪:


片段0:

#include <iostream>

template<typename T> void doLambda(T&& mFn)
{
  std::forward<T>(mFn)(int{0});
}

template<typename T> void test(T&& mV)
{
    doLambda([&mV](auto mE)
    {
        std::forward<decltype(mV)>(mV);
    });
}

int main() { test(int{0}); return 0; }

clang ++ 3.5.1 :代码段编译并成功运行。

g ++ 4.9.2 :代码段无法编译:

example.cpp:在'test(T&&)::<lambda(auto:1)> [with auto:1 = int; T = int]'实例中'test(T&&)::<lambda(auto:1)> [with auto:1 = int; T = int]' 'test(T&&)::<lambda(auto:1)> [with auto:1 = int; T = int]'

5: 'void doLambda(T&&) [with T = test(T&&) [with T = int]::]'
13: 'void test(T&&) [with T = int]'
18:从这里需要
12:错误:在此范围内未声明'mV'

std::forward<decltype(mV)>(mV);
^

编译失败


片段1:

与代码段0的唯一区别是,lambda中的auto已替换为int

#include <iostream>

template<typename T> void doLambda(T&& mFn)
{
  std::forward<T>(mFn)(int{0});
}

template<typename T> void test(T&& mV)
{
    doLambda([&mV](int mE)
    {
        std::forward<decltype(mV)>(mV);
    });
}

int main() { test(int{0}); return 0; }

clang ++ 3.5.1 :代码段编译并成功运行。

g ++ 4.9.2 :代码段编译并成功运行。


片段3:

Lambda现在称为就地。 auto仍在使用。

#include <iostream>

template<typename T> void test(T&& mV)
{
    [&mV](auto mE)
    {
        std::forward<decltype(mV)>(mV);
    }(int{0});
}

int main() { test(int{0}); return 0; }

clang ++ 3.5.1 :代码段编译并成功运行。

g ++ 4.9.2 :代码段编译并成功运行。


为什么G ++抱怨代码段0? 我的代码有什么问题吗? 这是一个已知的错误,还是我应该提交?

如评论中所述,此行为确实是gcc bug

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM