我遇到了麻烦std::is_member_function_pointer.据我所知,在给定noexcept成员函数时它不起作用.我在标准中找不到任何声明它对noexcept合格的成员函数不起作用的东西.问题示例:
#include <type_traits>
class A {
public:
void member() noexcept { }
};
int main()
{
// fails at compile time if A::member is a data member and not a function
static_assert(std::is_member_function_pointer<decltype(&A::member)>::value,
"A::member is not a member function.");
}
Run Code Online (Sandbox Code Playgroud)
它给了我以下错误:
member.cpp:11:5:错误:static_assert因需求'std :: is_member_function_pointer :: value'而失败"A :: member不是成员函数." static_assert(std :: is_member_function_pointer :: value,^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~ 1生成错误.
如果我删除了noexcept资格,它就应该编译.
这已在Debian Stretch上测试过,使用了clang 6.0和libstdc ++ 6.3.0我在这里遗漏了什么?从我可以阅读,这应该工作.
您的代码可以在 GodBolt 上编译- 无论是否noexcept在成员上 - 以及所有 MSVC 2017、GCC 5.5、6.x、8.x 、 clang 5、6、7。
在我的 Debian Stretch(嗯,确实是相应的Devuan)上 - 我可以重现这个问题。有趣的是,即使我切换到 libc++,编译也会失败。
所以: