visual Forcing在MSVC C++中内联lambda



下一个代码在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 中引入的属性语法

最新更新