It's never been possible.
Same situation for callAsFunction.
The closest the language allows to what you need is to supply an argument, effectively turning a subscript into a property. In the case of a () -> subscript, this syntax is just empty brackets.
struct S {
subscript() -> Void {
get { () }
nonmutating set { }
}
}
\S.[] // ReferenceWritableKeyPath<S, ()>
[S()].map(\.[])
S()[keyPath: \.[]] = ()
No similar feature exists for callAsFunction. Having both () and [] in this language is an anachronism.