C++ 未检测到带有右值ref参数的成员函数具有\u成员特征

C++ 未检测到带有右值ref参数的成员函数具有\u成员特征,c++,c++11,C++,C++11,正如标题所说,我有一个成员函数,其中包含一个右值引用参数,我希望使用has_成员特征来检测该参数。如果函数是模板化的,has_member为false,即使我没有使用该模板参数 我认为该准则将更好地澄清我的问题: class A { public: void foo(int&&){} }; HAS_MEMBER(foo); //macro that creates the struct has_member_foo<TYPE, SIGNATURE> has

正如标题所说,我有一个成员函数,其中包含一个右值引用参数,我希望使用has_成员特征来检测该参数。如果函数是模板化的,has_member为false,即使我没有使用该模板参数

我认为该准则将更好地澄清我的问题:

class A
{
public:
    void foo(int&&){}
};

HAS_MEMBER(foo); //macro that creates the struct has_member_foo<TYPE, SIGNATURE>

has_member_foo<A, void (A::*)(int&&) >::value == true


class A
{
public:
    template <typename T> //if the function is templated, it's not detected.
    void foo(int&&){}
};

has_member_foo<A, void (A::*)(int&&) >::value == false
A类
{
公众:
void foo(int&&{}
};
有大学会员(foo)//创建结构的宏具有\u成员\u foo

has_member_foo

确实,对于第二个类A,
void A::foo(int&&)
不存在,但是
void A::foo(int&)
存在。有没有办法在函数的签名中表达这一点?类似于
的东西有\u member\u foo::value
?或者我必须修改has_member?对于最后一部分,应该需要来自
has_member_foo
的代码。如果有帮助,我的(旧)宏会这样做。我们会的。这很有效,谢谢!对于我尝试过的has_member的早期版本,我无法做到这一点,因为它们将函数名附加到生成的类名中,因此它不能像
t::template foo
那样。
class A
{
public:
    template <typename T>
    void foo(T&&){}
};

has_member_foo<A,void (A::*)(int&&)>::value //true for vs2015, false for vs2012
has_member_foo<A,void (A::*)(int&)>::value //true for vs2015, false for vs2012
has_member_foo<A,void (A::*)(const int&)>::value //true for vs2015, false for vs2012