繁体   English   中英

std :: is_member_function_pointer不适用于noexcept成员函数

[英]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 ++,编译也会失败。

所以:

  • 这不是clang-6 in-and-of本身的错误
  • 这不是libstdc ++ 6.3.0本身的错误
  • 它可能与为Debian Stretch配置/设置事物的方式有关。 我建议把它放在irc.freenode.net上的#debian频道上

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM