C sfinae和!std :: is_member_function_pointer :: value的有效性

C++ SFINAE and the validity of !std::is_member_function_pointer::value

本文关键字:pointer function value 有效性 member is sfinae std      更新时间:2023-10-16

我正在使用C 中的SFINAE进行一些播放,以创建一个通用容器插入器模板函数,而i think the the Mepplate the Inspection the Inspection的模板以下构造

// replace T::nonexistent_member with whatever member function you want to test
// note the ! negation operator
std::enable_if< ! std::is_member_function_pointer<decltype(&T::nonexistent_member)>::value>

是副定义从不有效。

当成员函数不存在时,SFINAE规则会说" T没有名为nonexistent_member的成员函数,因此甚至不要考虑将模板作为匹配。"

当成员函数确实存在时, is_member_function_pointer会评估为true,使 enable_if false并从考虑中删除模板。

我正确吗?这种类型的表达在定义上是不正确的吗,当评估时,它只会评估为false。

如果 T::nonexistent_member是成员函数,则当然,enable_if此后会分流。

但是,它也可以是数据成员,静态成员函数或静态数据成员。在这种情况下,&T::nonexistent_member是有效的,但不是成员函数指针,因此enable_if通过。