Selected names to record elements using a type name

I'm a bit confused as to what exactly one can do with record elements (that are explicitly taken from the record type and not an object of the record type). For example, which of the following statements should compile?

type foo is record
    bar: bit;
    baz: bit_vector(7 downto 0);
end record;

signal a: foo.bar; -- I couldn't find anything that allows this, but also nothing that explicitly disallows this. EDA tools seem to reject this
signal c: integer := foo.baz'high; -- EDA tools seem to accept this, though foo.baz must be a scalar type or subtype. Similar examples include foo.baz'range or foo.baz'high downto foo.baz'low.
signal b: foo.bar'subtype; -- Should be illegal since foo.bar is not an object, but could make sense if v1 is not allowed

So to me it seems that record elements are technically just types, but are treated differently in the LRM. Is there anything that I overlooked? The section on records is pretty short and they are mentioned quite rarely elsewhere.