小编Ses*_*ing的帖子

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

分支中的Lambda没有采用恒定表达:谁是对的?

我尝试使用混合结果编译以下C++ 11代码.

struct NoTemplate {
    static constexpr auto (*foo)() = false ? +[]{} : nullptr;
};

NoTemplate no_inst;


template<typename>
struct YesTemplate {
    static constexpr auto (*foo)() = false ? +[]{} : nullptr;
};

YesTemplate<float> yes_inst;
Run Code Online (Sandbox Code Playgroud)
  • clang:NoTemplate成功编译; 给error: a lambda expression may not appear inside of a constant expressionYesTemplate.
  • gcc:成功编译
  • msvc:崩溃.
  • icc:崩溃(我们有一个胜利者!)

什么是正确的结果?我看到一些标准语言暗示非常量表达式应该在常量表达式中的短路运算符的假分支中可以正常,但IANALL.

c++ lambda language-lawyer c++11

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

未使用全局的静态初始化程序

如果我有一个从未使用的内部链接的全局,它的初始化程序是否可以保证运行?例如:

static int x = SideEffectfulFunction();
Run Code Online (Sandbox Code Playgroud)

要么

namespace {
    int x = SideEffectfulFunction();
}
Run Code Online (Sandbox Code Playgroud)

SideEffectfulFunction()保证被调用,即使x不会被引用?或者x删除是否合法?

c++ static-initialization

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