That is not my experience. gpg -d works fine with standard input. It doesn't distinguish between signed and unsigned.
You are right with CTRL-D but GPG's behaviour differs based on whether it deals with signed or unsigned messages. When I paste an unsigned message, having first run gpg -d, GPG decrypts the message without me having to press anything, I get something like that:
gpg: encrypted with 4096-bit RSA key, ID 2**************F, created 2024-03-01 "******@******" first line of the message second (last) line of the message
Having given me the decrypted message, then GPG just hangs on me. Yes, it is true that then I need to press CTRL-D, or CTRL-C for that matter, because GPG just hangs on me. My bad - not knowing what was happening I was just pressing CTRL-C. But with the signed message given to the stdin GPG behaves differently: the only output it gives me straight away is a note on the metadata without the actual content of the message:
encrypted with 4096-bit RSA key, ID 2**************F, created 2024-03-01 "*****@******"
When I then press CTRL-D it would give me the content of the message and the information about the signature:
first line of the message second (last) line of the message gpg: Signature made Thu 07 Mar 2024 08:13:41 CET gpg: using RSA key 2*******************************F gpg: Good signature from "*******@*******" [ultimate]
Do you have the same behaviour on your side when you decrypt an unsigned message?