Yes, why don't we just unify anything that sounds similar? I guess it
was too much to ask of the compiler creators to allow types to be
figured out from an expression, like in a declaration:
(object1 @ object2).sometypename variablename;
(here 'object1 @ object2' is an expression that yields another object,
of some type. The Standard writers agreed that to simplify the parsing
(again, I'm guessing here) you need to write
decltype(...) :: sometypename ...
since 'decltype' yields a *type*, and not an instance, you need to use
the scope resolution operator to get to a member type.