如pfultz2所示,對於lambda函數的靜態初始化有一個解決方法。其中一個步驟提到解除引用lambda函數類型的指針的nullptr。是否將nullptr解析爲lambda函數未定義的行爲?
template <typename T> typename std::remove_reference <T>::type * addr (T && t)
{
return & t;
}
constexpr auto f = true ? nullptr : addr ([] (int arg) { return arg + 1; });
int main()
{
assert (((*f) (1) == 2));
}
經歷的規範,另一個問題C/C++ nullptr dereference我聽不太懂*f
是未定義的行爲或不。規範中的哪些部分會使此不是未定義的行爲?
謝謝,現在看起來很明顯,當你指出它。我迷失在隱式轉換中,誰知道什麼! – listcrawler