How to express an empty relation (or table) in PostgreSQL?
Your last attempt can be changed to: 

select count(*) from ( select where false ) t


Which however is not standard SQL.

The only way I can think of in standard SQL is to use another subselect based on a VALUES clause that returns nothing:

select count(*) 
from ( 
  select * 
  from (values (null) ) x
  where false 
) t


Or use an intersection that is empty:

select count(*) 
from ( 
  select 1 
  intersect
  select 2 
) t


That's partially standard SQL, because a FROM clause is required by the standard.