Home > Net >  how to understand void (*&&)() func
how to understand void (*&&)() func

Time:08-11

I use C https://cppinsights.io/ to see the progress of instantiation, and there's something puzzled between Function&& and Function.

I comment the code generated by cppinsights.

template<typename Function>
void bind(int type, Function&& func)
{
}

/*
// instantiated from the function above:  
template<>
inline void bind<void (*)()>(int type, void (*&&)() func)
{
}
*/

template<typename Function>
void bindtwo(int type, Function func)
{
}

/*
template<>
inline void bindtwo<void (*)()>(int type, void (*func)())
{
}
*/

void test()
{
    std::cout << "test" << std::endl;
}

int main()
{
    bind(1, &test);
    bindtwo(2, test);
}

CodePudding user response:

how to understand void (*&&)() func

First things first, the above syntax is wrong because func should appear after the && and not after the () as shown below.

Now after the correction(shown below), func is an rvalue reference to a pointer to a function that takes no parameter and has the return type of void.

Note also that they syntax void (*&&)() func is wrong, the correct syntax would be as shown below:

template<>
//----------------------------------------------vvvv----->note the placement of func has been changed here
inline void bind<void (*)()>(int type, void (*&&func)() )
{
}
  • Related