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

时间:2019-01-30 16:22:33

标签: c++ c++17

我在使用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限定词,它将自动编译。

已使用clang 6.0和libstdc ++ 6.3.0在Debian Stretch上进行了测试 我在这里想念什么吗?据我了解,该应该可行。

1 个答案:

答案 0 :(得分:0)

您的代码compiles on GodBolt-成员上带有和不带有noexcept-带有所有MSVC 2017,GCC 5.5、6.x,8.x,clang 5、6、7。

在我的Debian Stretch(确实是相应的Devuan)上-我可以重现该问题。有趣的是,即使我切换到libc ++,编译也会失败。

所以:

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