Eu não entendo por que isso compila

Certamente estou perdendo alguma coisa, mas não entendo por que isso compila (com g ++ e clang ++): struct A { }; struct B { }; int main() { A a(B); } Primeiro de tudo, Bé um tipo ... não um valor. Como devo interpretar esse