// RUN: %check_clang_tidy %s performance-inefficient-string-concatenation %t

namespace std {
template <typename T>
class basic_string {
public:
  basic_string() {}
  ~basic_string() {}
  basic_string<T> *operator+=(const basic_string<T> &) {}
  friend basic_string<T> operator+(const basic_string<T> &, const basic_string<T> &) {}
};
typedef basic_string<char> string;
typedef basic_string<wchar_t> wstring;
}

void f(std::string) {}
std::string g(std::string) {}

int main() {
  std::string mystr1, mystr2;
  std::wstring mywstr1, mywstr2;
  auto myautostr1 = mystr1;
  auto myautostr2 = mystr2;

  for (int i = 0; i < 10; ++i) {
    f(mystr1 + mystr2 + mystr1);
    // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: string concatenation results in allocation of unnecessary temporary strings; consider using 'operator+=' or 'string::append()' instead
    mystr1 = mystr1 + mystr2;
    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: string concatenation
    mystr1 = mystr2 + mystr2 + mystr2;
    // CHECK-MESSAGES: :[[@LINE-1]]:30: warning: string concatenation
    mystr1 = mystr2 + mystr1;
    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: string concatenation
    mywstr1 = mywstr2 + mywstr1;
    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: string concatenation
    mywstr1 = mywstr2 + mywstr2 + mywstr2;
    // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: string concatenation
    myautostr1 = myautostr1 + myautostr2;
    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: string concatenation

    mywstr1 = mywstr2 + mywstr2;
    mystr1 = mystr2 + mystr2;
    mystr1 += mystr2;
    f(mystr2 + mystr1);
    mystr1 = g(mystr1);
  }
  return 0;
}
