Действительно ли выражения fun
и &fun
имеют один и тот же тип или нет?
Рассмотрим следующий код:
template <typename Check, typename T>
void check(T)
{
static_assert(is_same<Check, T>::value);
}
void fun()
{}
check<void(*)()>(fun);
check<void(*)()>(&fun);
cout << typeid(fun).name() << endl;
cout << typeid(&fun).name() << endl;
Оба утверждения преуспевают, что предполагает, что оба выражения имеют один и тот же тип. Однако typeid
возвращает разные результаты:
FvvE
PFvvE
Это почему?