Merge branch release-2016
[alexxy/gromacs.git] / docs / dev-manual / language-features.rst
1 Allowed language features
2 =========================
3
4 |Gromacs| uses C99 for C files and C++11 for C++ files. 
5 C++ has a lot of features, but to keep the source code maintainable and easy to read, 
6 we will avoid using some of them in Gromacs code. The basic principle is to keep things 
7 as simple as possible.
8 For compatiblity certain work-arounds are required because not all compilers support 
9 these standards fully.
10
11 * MSVC supports only a subset of C99 and work-arounds are required in those cases.
12 * Before 7.0 (partial support in 6.5) CUDA didn't support C++11. Therefore any
13   header file which is needed (or likely will be nedded) by CUDA should not use C++11.
14 * We should be able to use virtually all C++ features outside of the header files
15   required by CUDA code (and OpenCL kernels), since we have gradually moved to
16   compilers that have full support for C++11.
17
18 .. TODO: Copy important points from http://www.gromacs.org/index.php?title=Developer_Zone/Programming_Guide/Allowed_C%2B%2B_Features