[英]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.