This is an unrelated question about the code in [this question](https://stackoverflow.com/questions/11370340/how-do-i-get-the-template-type-of-a-given-element-at-runtime-in-c), regarding the following template function.

```
template <class T>
class Object : public Container {
public:
    T& object;

    Object(const T& obj) : object(obj) {}
};

```

This is the code that calls the constructor:

```
template <class T>
void Array::add_element(const T& element)
{
    vec.push_back(new Object<T>(element));
}

```

This code compiles fine, but as soon as I add a line in `main` that calls it:

```
Array array;
int i = 3;
array.add_element(i);

```

I get a compiler warning: `error: invalid initialization of reference of type 'int&' from expression of type 'const int'`.

What is that about? I passed an `int` in. Shouldn't it automatically be turned into a `const int&` for me? Why is the compiler complaining?