我在使用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上进行了测试 我在这里想念什么吗?据我了解,该应该可行。
答案 0 :(得分:0)
您的代码compiles on GodBolt-成员上带有和不带有noexcept
-带有所有MSVC 2017,GCC 5.5、6.x,8.x,clang 5、6、7。
在我的Debian Stretch(确实是相应的Devuan)上-我可以重现该问题。有趣的是,即使我切换到libc ++,编译也会失败。
所以: