Consider the following code:
class StringTokenizer 
{
private:
    char m_delimiter;
    std::istringstream m_string;
public:
    explicit StringTokenizer(const std::string& str, char delimiter)
    : m_string(str)
    , m_delimiter(delimiter)
    {
    }
    template <class Container>
    operator Container ()
    {
        Container container;
        for (std::string token; std::getline(m_string, token, m_delimiter); )
        {
            container.insert(container.end(), token);
        }
        return container;
    }
};
This is the usage:
vector<string> tmp = StringTokenizer("123 456", ' '); //Please note the implicit conversion
When debugging the following happens (Using VS2013):
At the return statement of conversion operator 
- new vector constructed from containerby moving
- containergets destructed
After function return:
- tmpis constructed by copy constructor
My question is why isn't tmp constructed by move constructor ?
As I understand things function return type is rvalue and should be moved.
 
     
    