¿Cuál es la diferencia entre void () y void {}?

Básicamente, me gustaría saber por qué el compilador rechazaptr2 declaración:

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

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

Echa un vistazo aeste código si lo creesptr1 es un puntero de función:

#include <iostream>
using namespace std;

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

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

La salida esvoid f(T) [with T = void*].