Вектор указателей на функцию с++

Есть вот такой код:

vector<void()> a; 
void b() {}
int main()
{
   a.push_back(b);
   return 0;
}

И на этапе компиляции он выбивает ошибку:

выполняется компиляция ссылки на экземпляр класс шаблон функции "std::vector<void (void),std::allocator<void (void)>>"

Но если я меняю объявление вектора на vector<void(*)()> a;, то код спокойно компилируется и работает. Объясните пожалуйста, почему так происходит.


Ответы (1 шт):

Автор решения: Zhihar

например так:

typedef void (*func)();

void b() {}

using namespace std;

int main()
{
    std::vector<func> a; 

    a.push_back(b);
    return 0;
}

или так:

using func = void (*)();

void b() {}

using namespace std;

int main()
{
    std::vector<func> a; 

    a.push_back(b);
    return 0;
}

впрочем можно сразу писать:

std::vector<void (*)()> a; 
→ Ссылка