Import cmake Modules/FindCUDA.cmake
[gromacs/AngularHB.git] / docs / dev-manual / language-features.rst
blob98ed8e6de13445cb1831ecfd7f47a4b14b60747d
1 Allowed language features
2 =========================
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.
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.
18 .. TODO: Copy important points from http://www.gromacs.org/index.php?title=Developer_Zone/Programming_Guide/Allowed_C%2B%2B_Features
20 C++ Standard Library
21 --------------------
23 |Gromacs| code must support the lowest common denominator of C++11 standard library
24 features available on supported platforms.
25 Some modern features are useful enough to warrant back-porting.
26 Consistent and forward-compatible headers are provided in ``src/gromacs/compat/``
27 as described in the `Library documentation <../doxygen/html-lib/group__group__compatibility.xhtml>`_