Generic pipe and filters
As run() is several lines long, it should be defined outside the class.  Anything defined inside is automatically inlined.
Depending on the size of data when passing by value, it may be best to pass it to run() by const&amp;, modify a local copy, and return that.  RVO should still kick in.
Is there a significance to the name foo here?  If not, it should be more accurate and start with a capital letter as it's a user-defined type.  The capitalization also applies to pipeline.
iter end = m_list.end(); seems pointless here.  You can just use m_list.end() inside the loop statement.

As m_list is not being modified inside the loop, you can instead use cbegin() and cend() for const-correctness.

If you have C++11, you can use auto to replace the defined iterator inside the loop statement.
Your "pause" is okay, but you can also use std::cin.get() to do the same thing.