How come spatial objects can't be used in a VALUES statement?
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