이 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
나는이 작업 할 기대 Clang하지만 Operator noexcept의 맥락에서 "this"와는 다른 처리 방식으로 인해 GCC가 아닙니다.
귀하의 질문에 무엇입니까? – aschepler
답변 중 하나가 당신의 질문에 대답하는 경우, 당신이 그것을 받아 들일 수 있습니다. 경우 둘 다 질문에 대답하지 못했습니다. 이유를 설명하여 대답을 향상시킬 수 있습니까? – Justin
긴 지연에 대해 유감스럽게 생각합니다. 나는 그 대답에 만족하지 못했지만, 그 질문에 답을 한 후에 받아 들일 것입니다. 그러나 필자의 경우 "f"는 라이브러리 사용자가 전달한 템플릿 매개 변수이므로 멤버 함수에 대한 포인터의 noexcept 지정자를 올바르게 선언하려면 함수 유형의 noexcept-ness를 쿼리해야합니다. 안타깝게도 형식 별칭에 noexcept를 추가하더라도 F에 대한 별칭이 템플릿으로 만들어져 컴파일되지 않습니다. 이는 내부 컴파일러 오류를 발생시킵니다. 이것에 대한 Clang 버그를 게시 할 것입니다. – Jackie