#include <iostream>
void noexcept_dummy() noexcept;
typedef decltype(noexcept_dummy)* f_ptr_t;
void f() noexcept { std::cout << "f called\n"; }
void g() noexcept(false) { std::cout << "g called\n"; }
void test(f_ptr_t func) { func(); }
int main() {
f_ptr_t x = &f;
//f_ptr_t x = &g; // error
std::cout << std::boolalpha
<< "f: " << noexcept(f()) << "\n"
<< "g: " << noexcept(g()) << "\n"
<< "x: " << noexcept(x()) << "\n";
test(x);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdm9pZCBub2V4Y2VwdF9kdW1teSgpIG5vZXhjZXB0Owp0eXBlZGVmIGRlY2x0eXBlKG5vZXhjZXB0X2R1bW15KSogZl9wdHJfdDsKCnZvaWQgZigpIG5vZXhjZXB0IHsgc3RkOjpjb3V0IDw8ICJmIGNhbGxlZFxuIjsgfQp2b2lkIGcoKSBub2V4Y2VwdChmYWxzZSkgeyBzdGQ6OmNvdXQgPDwgImcgY2FsbGVkXG4iOyB9Cgp2b2lkIHRlc3QoZl9wdHJfdCBmdW5jKSB7IGZ1bmMoKTsgfQoKaW50IG1haW4oKSB7CglmX3B0cl90IHggPSAmZjsKCS8vZl9wdHJfdCB4ID0gJmc7IC8vIGVycm9yCglzdGQ6OmNvdXQgPDwgc3RkOjpib29sYWxwaGEKCQk8PCAiZjogIiA8PCBub2V4Y2VwdChmKCkpIDw8ICJcbiIKCQk8PCAiZzogIiA8PCBub2V4Y2VwdChnKCkpIDw8ICJcbiIKCQk8PCAieDogIiA8PCBub2V4Y2VwdCh4KCkpIDw8ICJcbiI7Cgl0ZXN0KHgpOwoJcmV0dXJuIDA7Cn0=