title: operator _surrogate_func: no matching overload found and 2 other errors
body: <p>I've written a code which creates a list of buses that you can modify and manage. The whole managing process is proceed by writing strings in console. After running code I'm receiving 3 errors, none of which I understand therefore can fix. Code is planned this way:</p>
  
  <p>NEW_BUS - Adds new bus in list by taking it's number, amount of stops and stop list.
  ALL_BUSES - Display all buses in lexicographical order (by their name)
  STOPS_FOR_BUS - Display all stops specific bus follows.
  BUSES_FOR_STOP - Diplay all buses that go though the specific stop.</p>
  
  <p>Here are error list:
  1. operator _surrogate_func: no matching overload found
  2. Failed to specialize function template 'unknown-type std::less::operator ()(_Ty 1 &amp;&amp;,_Ty2 &amp;&amp;)
  3. illegal expression</p>
  
  <p>All errors come from line 617 from xutility file.</p>
  
  <pre><code>   #include &lt;iostream&gt;
     #include &lt;string&gt;
     #include &lt;vector&gt;
     #include &lt;list&gt;
     #include &lt;tuple&gt;
     #include &lt;iterator&gt;
  
     using namespace std;
  
     class Bus {
     public:
      int StopsAmount;
      string BusNumber;
      vector&lt;string&gt; Stops;
  
      Bus(tuple&lt;string, int, vector&lt;string&gt;&gt; BusParams) {
          BusNumber = get&lt;0&gt;(BusParams);
          StopsAmount = get&lt;1&gt;(BusParams);
          Stops = get&lt;2&gt;(BusParams);
      }
  
      void ShowStops() {
          cout &lt;&lt; BusNumber &lt;&lt; ": ";
          for (int i = 0; i &lt; StopsAmount; i++) cout &lt;&lt; Stops[i] &lt;&lt; " ";
          cout &lt;&lt; "\n";
      }
  
      bool FindStop(string Stop) {
          for (int i = 0; i &lt; StopsAmount; i++) {
              if (Stops[i] == Stop) {
                  return true;
              }
          }
          return false;
              }
           };   
  
        class BusTraffic {
        public:
          BusTraffic() {
              while (true) {
                  string Request;
                  cin &gt;&gt; Request;
                  switch (Request[0]) {
                  case 'N': NEW_BUS(Request.substr(8, Request.length() - 8))      ;
                  break;
              case 'B': BUSES_FOR_STOP(Request.substr(15, Request.length() - 15));
                  break;
              case 'S': STOPS_FOR_BUS(Request.substr(14, Request.length() - 14));
                  break;
              case 'A': ALL_BUSES();
                  break;
              }
          }
      }
  
        private:
          list&lt;Bus&gt; BusList;
  
      void NEW_BUS(string Request) {
          BusList.push_back(Bus::Bus(SplitString(Request)));
      }
  
      void BUSES_FOR_STOP(string Stop) {
          cout &lt;&lt; Stop &lt;&lt; ": ";
          for (list&lt;Bus&gt;::iterator It = BusList.begin(); It != BusList.end(); It++) {
              if (It-&gt;FindStop(Stop)) {
                  cout &lt;&lt; It-&gt;BusNumber &lt;&lt; " ";
              }
          }
          cout &lt;&lt; endl;
      }
  
      void STOPS_FOR_BUS(string Name) {
          cout &lt;&lt; Name &lt;&lt; ": ";
          for (list&lt;Bus&gt;::iterator It = BusList.begin(); It != BusList.end(); It++) {
              if (It-&gt;BusNumber == Name) {
                  It-&gt;ShowStops();
              }
          }
      }
  
      void ALL_BUSES() {
          if (BusList.size() &gt; 0) {
              BusList.sort();
              for (list&lt;Bus&gt;::iterator It = BusList.begin(); It != BusList.end(); It++) {
                  cout &lt;&lt; It-&gt;BusNumber &lt;&lt; ": ";
                  It-&gt;ShowStops();
              }
          }
          else {
              cout &lt;&lt; "No buses" &lt;&lt; endl;
          }
      }
  
      // Converting string to information about bus
      tuple&lt;string, int, vector&lt;string&gt;&gt; &amp;SplitString(string str) {
          tuple&lt;string, int, vector&lt;string&gt;&gt; BusParams;
          string Word = "";
          int WordNum = 0;
  
          for (auto Letter : str) {
              if (Letter == ' ') {
                  if (WordNum == 0) get&lt;0&gt;(BusParams) = Word; 
                  if (WordNum == 1) get&lt;1&gt;(BusParams) = stoi(Word);
                  if (WordNum == 2) get&lt;2&gt;(BusParams).push_back(Word);
                  Word = "";
                  WordNum++;
              }
              else {
                  Word = Word + Letter;
              }
          }
          get&lt;2&gt;(BusParams).push_back(Word);
          return BusParams;
          }
        };
  
        int main() {
          BusTraffic TestTraffic;
          return 0;
        }
  </code></pre>