下一个代码在CLang/GCC中编译,并成功内联lambda:
在线试用!
#include <iostream>
int main() {
int x = 0;
auto f = [&]() __attribute__((always_inline)) {
++x;
};
f();
std::cout << x;
}
但在最新的MSVC(2019 v16.8.3(中使用__forceinline
的类似代码没有编译,尽管已宣布在v16.7:中实现
在线试用!
#include <iostream>
int main() {
int x = 0;
auto f = [&]() __forceinline {
++x;
};
f();
std::cout << x;
}
引发编译错误CCD_ 2。
它真的还没有实现吗?还是我在错误的地方使用了__forceinline
?有没有其他方法可以强制在MSVC中内联lambda?
此外,在所有流行的编译器(如CLang/GCC/MSVC(中,如果给定的lambda在某个地方使用而没有内联,是否有任何方法不编译代码(并引发编译错误(?另外,在所有100%的用例中,__attribute__((always_inline))
和__forceinline
是否保证lambda是绝对内联的?
根据Jonathan Caves对功能请求的回复,未来支持的语法是
auto f = [&]() [[msvc::forceinline]] {
++x;
};
哪个编译
看起来他们希望它符合C++11 中引入的属性语法