Что такое макросы в С++?
потому что x это 3 + 0; (целиком) это тупо текст, который будет вставлен вместо x;
x * x == 3 + 0 * 3 + 0;
получаем 
3 + (0 * 3) + 0;
3 + 0 + 0;
3;макросы в С++
Атавизм
иногда полезный
https://en.cppreference.com/w/cpp/preprocessor/replace
а так тут есть как минимум
https://en.cppreference.com/w/cpp/language/constexpr
https://en.cppreference.com/w/cpp/language/templatescode#include <iostream>

template<typename T>
auto sqr = [](T x)
{
  return x * x;
};

int main()
{
  std::cout << sqr<int>(3 + 0);
}
что будет развернуто в что-то типа//...
class __lambda_3_12
{
  public: inline int operator()(int x) const
  {
    return x * x;
  }
//...
};
//...
#define sqr(x) x*x - это образец того, как не нужно писать макросы.
Более правильно так: #define SQR(x) ((x)*(x))
Тогда:((3+0)*(3+0)) = 9
Но в С++ использование макросов считается дурным тоном (чаще всего). Используйте inline - функции.