В чем разница между void () и void {}?

В основном, я хотел бы знать, почему компилятор отклоняетptr2 объявление:

int main() {
    // this one works
    decltype(void())* ptr1;

    // this one does not
    decltype(void{})* ptr2;
}

Взгляни наэтот код если вы думаете, чтоptr1 указатель на функцию:

#include <iostream>
using namespace std;

template <class T>
void f(T t) {
    cout << __PRETTY_FUNCTION__ << endl;
}

int main() {
    decltype(void())* ptr;
    f(ptr);
}

Выходvoid f(T) [with T = void*].