Clang compile error

I get compile errors for just including the “clang/Basic/Diagnostic.h” header file. Is that expected? Should I include anything else? Here are the errors:

$ g++ main.cpp -I llvm/tools/clang/include -I llvm/include

In file included from llvm/include/llvm/Support/PointerLikeTypeTraits.h:18,
from llvm/tools/clang/include/clang/Basic/SourceLocation.h:17,
from llvm/tools/clang/include/clang/Basic/Diagnostic.h:18,
from main.cpp:1:
llvm/include/llvm/Support/DataTypes.h:45:3: error: #error “Must #define __STDC_LIMIT_MACROS before #including System/DataTypes.h”
llvm/include/llvm/Support/DataTypes.h:49:3: error: #error "Must #define __STDC_CONSTANT_MACROS before " “#including System/DataTypes.h”
llvm/include/llvm/Support/MathExtras.h: In function ‘bool llvm::isInt(int64_t)’:
llvm/include/llvm/Support/MathExtras.h:38: error: there are no arguments to ‘INT64_C’ that depend on a template parameter, so a declaration of ‘INT64_C’ must be available
llvm/include/llvm/Support/MathExtras.h:38: error: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
llvm/include/llvm/Support/MathExtras.h:38: error: there are no arguments to ‘INT64_C’ that depend on a template parameter, so a declaration of ‘INT64_C’ must be available
llvm/include/llvm/Support/MathExtras.h: In function ‘bool llvm::isUInt(uint64_t)’:
llvm/include/llvm/Support/MathExtras.h:57: error: there are no arguments to ‘UINT64_C’ that depend on a template parameter, so a declaration of ‘UINT64_C’ must be available
llvm/include/llvm/Support/MathExtras.h: In function ‘bool llvm::isIntN(unsigned int, int64_t)’:
llvm/include/llvm/Support/MathExtras.h:82: error: ‘INT64_C’ was not declared in this scope