class C {
auto (*foo)() -> decltype(this);
};
Run Code Online (Sandbox Code Playgroud)
此代码被GCC,MSVC和clang接受,但不是icc.
我尝试使用混合结果编译以下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)
NoTemplate成功编译; 给error: a lambda expression may not appear inside of a constant expression上YesTemplate.什么是正确的结果?我看到一些标准语言暗示非常量表达式应该在常量表达式中的短路运算符的假分支中可以正常,但IANALL.
如果我有一个从未使用的内部链接的全局,它的初始化程序是否可以保证运行?例如:
static int x = SideEffectfulFunction();
Run Code Online (Sandbox Code Playgroud)
要么
namespace {
int x = SideEffectfulFunction();
}
Run Code Online (Sandbox Code Playgroud)
为SideEffectfulFunction()保证被调用,即使x不会被引用?或者x删除是否合法?