ber*_*ers 3 c++ templates functional-programming barrier
我在https://cpp.sh/中尝试了以下操作。正如您所看到的,我没有找到跨编译器工作的单行示例。特别是,我想知道看似标准代码中的 MSVC 静态断言:
#include <barrier>
#include <functional>
class Class {
// missing template argument
// std::barrier my_barrier1;
// static assert N4861 in MSVC
// std::barrier<void(*)(void) noexcept> my_barrier2;
// static assert N4861 in MSVC
// std::barrier<std::function<void()>> my_barrier3;
// std::function does not like noexcept
// std::barrier<std::function<void() noexcept>> my_barrier3b;
// compiles in MSVC but not here
// std::barrier<std::_No_completion_function> my_barrier4;
// copied from MSVC - works in both
struct _No_completion_function {
void operator()() noexcept {}
};
std::barrier<_No_completion_function> my_barrier5;
};
int main() {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
std::barrier我是否忽略了声明没有完成功能的明显方式?
与 N4861 相关,但最终没有帮助:
std::barrier<> my_barrier;
Run Code Online (Sandbox Code Playgroud)
在某些情况std::barrier my_barrier;下也会起作用。
std::barrier<>和std::barrier不是同一件事。后者正式要求类模板参数推导,这在某些上下文中是不允许的(例如,对于非静态数据成员,这就是您所看到的)。