使用 GSL 跨度时避免丢失 __restrict__

ein*_*ica 7 c++ restrict guideline-support-library

我(主要)喜欢新的 C++ 核心指南倡议,以及指南支持库提供的内容。具体来说,我想更多地使用spans 。__restrict__然而,当我想/需要使用 C++ 时,我遇到了不属于 C++的问题。

更具体地说:如果没有span's,我会声明:

void foo(int* __restrict__ p, size_t len);
Run Code Online (Sandbox Code Playgroud)

但如果我现在声明:

void foo(gsl::span<int> s);
Run Code Online (Sandbox Code Playgroud)

__restrict__除非我的编译器超级智能,否则我不会得到效果。我可以向 gcc/clang/msvc 之神祈祷并说:

void foo(gsl::span<int> __restrict__ s);
Run Code Online (Sandbox Code Playgroud)

或者,我可以调整 GSLspan<T>实现,以便T* beginT* end指针本身被__restrict__编辑。然而,根本不确定这一点是否会得到尊重。

那么,我可以以__restrict__某种方式强制离子吗?或者我应该放弃它?这会失去切换到span's 的乐趣...