Non capisco bene la necessità, oltre a giocare con la sintassi. Questo è esattamente cosa auto
è stato progettato per e auto
è supportato dallo stesso standard aggiunto decltype
...
Ad ogni modo, è necessario simulare la chiamata di funzione:
decltype(std::declval<A>()[0]) b = 0; // equivalent to `int b = 0;`