How come spatial objects can't be used in a VALUES statement? How come you can do,

SELECT *
FROM (VALUES
  ('foo')  -- or (1), etc.
) AS t(x);


But, not 

SELECT *
FROM ( VALUES
  ( geography::Point(0,0,4326) )
) AS t(geog);


I was trying to answer this question, but had to create a temp table instead.
What result are you expecting? It seems to work OK for me:




SELECT *
FROM (VALUES
  ('foo')  -- or (1), etc.
) AS t(x);
GO



| x   |
| :-- |
| foo |






SELECT *
FROM ( VALUES
  ( geography::Point(0,0,4326) )
) AS t(geog);
GO



| geog        |
| :---------- |
| POINT (0 0) |



dbfiddle here