[英]std::is_member_function_pointer not working for noexcept member functions
我在使用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.");
}
它给了我以下错误:
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
会员上的noexcept - 所有MSVC 2017,GCC noexcept
,8.x,clang 5,6,7。
在我的Debian Stretch上(好吧,相应的Devuan真的) - 我可以重现这个问题。 有趣的是,即使我切换到libc ++,编译也会失败。
所以:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.