在 MSVC C++ 中强制内联 lambda

Art*_*oul 4 c++ lambda inline visual-c++ visual-studio-2019

下一个代码在 CLang/GCC 中编译,并成功内联 lambda:

在线试试吧!

#include <iostream>

int main() {
    int x = 0;
    auto f = [&]() __attribute__((always_inline)) {
        ++x;
    };
    f();
    std::cout << x;
}
Run Code Online (Sandbox Code Playgroud)

但是与__forceinline最新的 MSVC(2019 v16.8.3)中的类似代码无法编译,尽管已宣布在 v16.7 中实现

在线试试吧!

#include <iostream>

int main() {
    int x = 0;
    auto f = [&]() __forceinline {
        ++x;
    };
    f();
    std::cout << x;
}
Run Code Online (Sandbox Code Playgroud)

抛出编译错误0305.cpp(5): error C3260: 'type': skipping unexpected token(s) before lambda body

它真的还没有实现还是我用__forceinline错了地方?有没有其他方法可以在 MSVC 中强制内联 lambda?

在所有流行的编译器(例如 CLang/GCC/MSVC)中是否有任何方法不编译代码(并抛出编译错误),以防在某些地方使用给定的 lambda 而不进行内联?也确实__attribute__((always_inline))__forceinline使用用例都100%保证拉姆达肯定是内联?

Nat*_*ica 6

根据Jonathan Caves对功能请求的回复,未来支持的语法是

auto f = [&]() [[msvc::forceinline]] {
    ++x;
};
Run Code Online (Sandbox Code Playgroud)

哪个编译

看起来他们希望它符合C++11 中引入的属性语法