相关疑难解决方法(0)

如何在lambda中使用constexpr值?

我想在lambda中使用constexpr值.阅读使用lambda捕获的constexpr值作为数组维度的答案 ,我假设以下应该工作:

  #include<array>
  int main()
  { 
    constexpr int i = 0;
    auto f = []{  
      std::array<int, i> a;
    };
    return 0;
  }
Run Code Online (Sandbox Code Playgroud)

然而,Clang 3.8(std = c ++ 14)抱怨说

变量'i'不能在没有指定capture-default的lambda中隐式捕获

这应该被视为clang 3.8中的错误吗?

BTW:

上面的代码用gcc 4.9.2编译.如果我将lambda表达式更改为显式捕获:

...
auto f = [i]{
...
Run Code Online (Sandbox Code Playgroud)

clang 3.8编译它,但gcc 4.9.2失败:

错误:'i'的值在常量表达式中不可用...

c++ lambda constexpr c++14

18
推荐指数
1
解决办法
1476
查看次数

必须在C++中用lambda捕获constexpr表达式吗?

这是一段无法在MSVC 2015中编译的代码(忽略未初始化的值访问):

#include <array>
int main() {
    constexpr int x = 5;
    auto func = []() {
        std::array<int, x> arr;
        return arr[0];
    };
    func();
}
Run Code Online (Sandbox Code Playgroud)

它抱怨说:

'x' cannot be implicitly captured because no default capture mode has been specified
Run Code Online (Sandbox Code Playgroud)

但是x是一个constexpr! x在编译时是已知的5.为什么MSVC会对此大做文章?(是不是另一个MSVC的错误?)GCC将愉快地编译它.

c++ lambda visual-c++ constexpr c++14

11
推荐指数
1
解决办法
605
查看次数

为什么 constexpr const 作用域变量不是隐式静态的?

(接着这个问题:)

void foo() {
    constexpr const auto my_lambda = [](int z) { return z+1; };
}
Run Code Online (Sandbox Code Playgroud)

显然,my_lambda“不是静态的”。除了没有正式定义之外,在什么意义上它不是静态的?为什么它不应该是隐式静态的,看看它似乎符合定义

c++ lambda static constexpr storage-duration

1
推荐指数
1
解决办法
102
查看次数

标签 统计

c++ ×3

constexpr ×3

lambda ×3

c++14 ×2

static ×1

storage-duration ×1

visual-c++ ×1