這MWE可能會出現人爲後會失敗,但失敗的static_assert是令人驚訝的仍然:noexcept操作的調用指針到成員函數
#include <utility>
struct C {
void f() noexcept { }
using F = void(C::*)();
static constexpr F handler() noexcept {
return &C::f;
}
void g() noexcept(noexcept((this->*handler())())) {
}
};
int main() {
static_assert(noexcept(std::declval<C>().g()));
}
Wandbox鏈接:https://wandbox.org/permlink/a8HSyfuyX1buGrbZ
我希望它可以工作在鏘但不是GCC由於其不同的治療方法「這個」在運營商noexcept的情況下。
什麼是你的問題? – aschepler
如果其中一個答案回答你的問題,你能接受它。如果兩人都沒有回答你的問題,你能解釋一下爲什麼這麼說,我們可以提高我們的答案? – Justin
很抱歉,很長的延遲;我對答案不滿意,但我會接受一個答案,因爲他們回答了這個問題。但是,在我的情況下,「f」是庫的用戶傳遞的模板參數,所以我需要查詢函數類型的noexcept-ness以正確地聲明指向成員函數的noexcept說明符。不幸的是,即使我添加noexcept到類型別名,它也不會編譯,因爲我的F別名是模板化的,這會導致內部編譯器錯誤。我會發布關於這個的Clang bug。 – Jackie