In today's cross-platform C++ (or C) world we [have][1]:

<!-- language: lang-none -->

    Data model 	| short | 	int |	long | long long | pointers/size_t 	| Sample operating systems
    ... 
    LLP64/IL32P64 	16 	    32   	32 	   64 	        64 	              Microsoft Windows (x86-64 and IA-64)
    LP64/I32LP64 	16 	    32 	    64 	   64 	        64 	              Most Unix and Unix-like systems, e.g. Solaris, Linux, BSD, and OS X; z/OS
    ...

What this means today, is that for any "common" (signed) integer, `int` will suffice and can possibly still be used as the default integer type when writing C++ application code. It will also - *for current practical purposes* - have a consistent size across platforms.

Iff a use case requires at least 64 bits, we can today use `long long`, though possibly using one of the [bitness-specifying types][2] or the `__int64`type might make more sense.

This leaves `long`in the middle, and **we're considering outright banning the use of `long` from our application code**.

**Would this make sense**, or is there a case for using `long` in modern C++ (or C) code that has to run cross platform? (platform being desktop, mobile devices, but not things like microcontrollers, DSPs etc.)

-----
Possibly interesting background links: 

* [What does the C++ standard state the size of int, long type to be?][3]
* [Why did the Win64 team choose the LLP64 model?](https://blogs.msdn.microsoft.com/oldnewthing/20050131-00/?p=36563/)
* [64-Bit Programming Models: Why LP64?][4] (somewhat aged)


  [1]: https://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models
  [2]: http://en.cppreference.com/w/cpp/types/integer
  [3]: http://stackoverflow.com/questions/589575/what-does-the-c-standard-state-the-size-of-int-long-type-to-be
  [4]: http://www.unix.org/version2/whatsnew/lp64_wp.html