If I run:

```
#include <type_traits>
#include <iostream>

int main()
{
    std::cout << "sizeof(long) = " << sizeof(long) << "\n";
    std::cout << "sizeof(long long) = " << sizeof(long long) << "\n";
    std::cout << "std::is_same<long, long long>::value = " 
        << std::boolalpha << std::is_same<long, long long>::value 
        << "\n";
    return 0;
}

```

on my machine (and on Coliru), I [get](http://coliru.stacked-crooked.com/a/057296f7d741dc5e):

```
sizeof(long) = 8
sizeof(long long) = 8
std::is_same<long, long long>::value = false

```

And it isn't just `std::is_same<>`; translation units expecting an instantiation for `int64_t` fail because I only compiled for `int` and `long long int` in another translation unit, despite it all happening on the same machine.

Why aren't these types the same? I mean, exhibiting behavior like you would have from `typedef`'s of the same type?