xax*_*xon 8 c++ lambda templates
在下面的代码中,在第一个表单上,gcc抱怨在模板参数中有一个lambda.在第二种形式中,gcc抱怨lambda_function_pointer没有外部链接.Clang编译并运行代码就好了,即使是-pedantic.
所述+前拉姆达的是将其转换到衰变到一个函数指针.
template<auto f>
void func() {
f();
}
void g();
int main() {
func<+[](){}>(); // gcc complains about lambda in template args
constexpr auto lambda_function_pointer = +[](){};
func<lambda_function_pointer>(); // gcc complains about not having external linkage
}
Run Code Online (Sandbox Code Playgroud)
直播:https://godbolt.org/g/ey5uo7
谢谢.
编辑:https://timsong-cpp.github.io/cppwp/n4659/expr.prim.lambda#2
提到了在签名不是拉姆达的缘故模板参数未出现lambda表达式,但随着+,它得到摆脱lambda类型.
edit2:这可能与问题的链接部分有关:为什么C++ 03需要模板参数才能有外部链接?
func<+[](){}>根据您链接到的确切段落,C++17 中的格式不正确。非规范性注释只是解释了规范性禁止的动机。它没有——也不能——限制它。这个限制在当前的工作草案中已被P0315删除,因此很有可能成为 C++20。
在 C++17 之前,无法在常量表达式内计算lambda 表达式。
“链接”部分是Can I use the result of a C++17 captureless lambda constexpr conversion operator as a function pointer template non-type argument? 的重复部分 。这是一个海湾合作委员会错误。
| 归档时间: |
|
| 查看次数: |
192 次 |
| 最近记录: |