Event-listener implementation
As I said in the comments, your system is pretty close to a system of signals and slots. Congratulations if you never heard of the pattern before, that's an excellent way to implement an the observer design pattern! I still have few notes:


I don't know which compiler you use, but mine won't compile your code unless I include &lt;memory&gt; for std::shared_ptr. I suppose that it may be transitively included from &lt;functional&gt; or &lt;list&gt; in your implementation. Never rely on transitive includes from the standard library and always include the exact header that contains what you need.
Qt, which is the emblematic library when it comes to signals and slots, tends to use past participle for its signas names. For example, instead of click, it would be clicked:

button.clicked.connect(/* whatever */);


It allows to read the line easily as "when button is clicked, do whatever". Also, it makes the object look more like a trigger and less like an action.
From a design point of view, connect being a method taking only one function, I would expect it to add the function to the list, not to return a listener.
You should encapsulate std::shared_ptr&lt;std::list&lt;std::function&lt;void(Args...)&gt;&gt;&gt; instead of inheriting from it. Frankly, you don't want people to expose every method of std::shared_ptr. You don't want people to think of pointers when they want events, right?


The truth is my answer isn't really personal. Since your class obviously looks like a signal class, everything I am saying tends to mean "make your design closer to those of existing signal classes like Boost.Signals2" :/