This might be something really simple, but I cannot figure out why this code does not compile

```
#include <type_traits>

template <std::size_t Size, std::size_t Align>
void foo(std::aligned_storage_t<Size, Align>&) {}

int main() {
    auto storage = std::aligned_storage_t<100, 8>{};
    foo(storage);
}

```

(<https://wandbox.org/permlink/PdBwAWVh6N9rkTE2>)

How can I get this to work? And why does not this compile?

---

The usecase is that `foo()` is a suite of overloads on unrelated types like `aligned_storage_t`, `int`, `double`, etc. And the `aligned_storage_t` instance represents memory that `foo()` knows how to reinterpret and use.