C++ SFINAE 和 !std::is_member_function_pointer::value 的有效性
C++ SFINAE and the validity of !std::is_member_function_pointer::value
我正在尝试使用 C++ 中的 SFINAE
创建一个通用的容器插入器模板函数,我 认为以下结构
// 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 doesn't have a member function called nonexistent_member
so don't even bother considering the template as a match."
当成员函数确实存在时,is_member_function_pointer
计算结果为真,使 enable_if
为假并从考虑中删除模板。
我说的对吗?此类型表达式在定义上是否不正确,其中,当它求值时,只会求值为 false。
如果T::nonexistent_member
是成员函数,当然,enable_if
会在后面分流
但是,它也可以是数据成员,或者静态成员函数,或者静态数据成员。在那些情况下,&T::nonexistent_member
是有效的,但 不是 成员函数指针,因此 enable_if
通过。
我正在尝试使用 C++ 中的 SFINAE
创建一个通用的容器插入器模板函数,我 认为以下结构
// 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 doesn't have a member function called nonexistent_member
so don't even bother considering the template as a match."
当成员函数确实存在时,is_member_function_pointer
计算结果为真,使 enable_if
为假并从考虑中删除模板。
我说的对吗?此类型表达式在定义上是否不正确,其中,当它求值时,只会求值为 false。
如果T::nonexistent_member
是成员函数,当然,enable_if
会在后面分流
但是,它也可以是数据成员,或者静态成员函数,或者静态数据成员。在那些情况下,&T::nonexistent_member
是有效的,但 不是 成员函数指针,因此 enable_if
通过。