Now suppose a user decides they want to interface with reflection in an object-oriented style:
```
template<auto R>
struct DeclWrapper {
auto nextDecl() { return DeclWrapper <decltype(std::meta::get_next_decl(R))>{}; }
auto prevDecl() {…}
auto getParent() { … }
…
};
#include … // lots of stuff, big translation unit
int foo;
constexpr auto foorefl = DeclWrapper <decltype(^foo)>()>();
```
What happens when `foorefl` is instantiated?
First each member of DeclWrapper<decltype(^foo)> must be instantiated, which means we have to instantiate each return type, each of which is a DeclWrapper, which itself has to be instantiated, …
The chain reaction results in instantiations of DeclWrappers for *every single declaration in the translation unit*.