// RUN: %check_clang_tidy %s misc-sizeof-container %t -- -- -std=c++11 -target x86_64-unknown-unknown

namespace std {

typedef unsigned int size_t;

template <typename T>
struct basic_string {
  size_t size() const;
};

template <typename T>
basic_string<T> operator+(const basic_string<T> &, const T *);

typedef basic_string<char> string;

template <typename T>
struct vector {
  size_t size() const;
};

// std::bitset<> is not a container. sizeof() is reasonable for it.
template <size_t N>
struct bitset {
  size_t size() const;
};

// std::array<> is, well, an array. sizeof() is reasonable for it.
template <typename T, size_t N>
struct array {
  size_t size() const;
};

class fake_container1 {
  size_t size() const; // non-public
};

struct fake_container2 {
  size_t size(); // non-const
};

}

using std::size_t;

#define ARRAYSIZE(a) \
  ((sizeof(a) / sizeof(*(a))) / static_cast<size_t>(!(sizeof(a) % sizeof(*(a)))))

#define ARRAYSIZE2(a) \
  (((sizeof(a)) / (sizeof(*(a)))) / static_cast<size_t>(!((sizeof(a)) % (sizeof(*(a))))))

struct string {
  std::size_t size() const;
};

template<typename T>
void g(T t) {
  (void)sizeof(t);
}

void f() {
  string s1;
  std::string s2;
  std::vector<int> v;

  int a = 42 + sizeof(s1);
// CHECK-MESSAGES: :[[@LINE-1]]:16: warning: sizeof() doesn't return the size of the container; did you mean .size()? [misc-sizeof-container]
  a = 123 * sizeof(s2);
// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: sizeof() doesn't return the size
  a = 45 + sizeof(s2 + "asdf");
// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: sizeof() doesn't return the size
  a = sizeof(v);
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: sizeof() doesn't return the size
  a = sizeof(std::vector<int>{});
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: sizeof() doesn't return the size

  a = sizeof(a);
  a = sizeof(int);
  a = sizeof(std::string);
  a = sizeof(std::vector<int>);

  g(s1);
  g(s2);
  g(v);

  std::fake_container1 fake1;
  std::fake_container2 fake2;
  std::bitset<7> std_bitset;
  std::array<int, 3> std_array;

  a = sizeof(fake1);
  a = sizeof(fake2);
  a = sizeof(std_bitset);
  a = sizeof(std_array);


  std::string arr[3];
  a = ARRAYSIZE(arr);
  a = ARRAYSIZE2(arr);
  a = sizeof(arr) / sizeof(arr[0]);

  (void)a;
}
