C++ draft standard N4604
I just learned about the new C++ draft standard N4604.
I read Section 16.8 “Predefined macro names” and created this little test program to assess the compilers available:
#ifndef __cplusplus
#error not a conforming C++ compiler
#endif
#if __cplusplus >= 199711L
#include <iostream>
using namespace std;
#elif __cplusplus < 199711L
#include <iostream.h>
#endif
// last changed 2016-08-11 in accordance with the N4604 draft standard
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4604.pdf
int main()
{
cout << "__cplusplus is " << __cplusplus << endl;
cout << "__DATE__ is " << __DATE__ << endl;
cout << "__FILE__ is " << __FILE__ << endl;
cout << "__LINE__ is " << __LINE__ << endl;
#ifdef __STDC_HOSTED__
cout << "__STDC_HOSTED__ is " << __STDC_HOSTED__ << endl;
#else
cout << "__STDC_HOSTED__ is not defined" << endl;
#endif
cout << "__TIME__ is " << __TIME__ << endl;
#ifdef __STDC__
cout << "__STDC__ is " << __STDC__ << endl;
#else
cout << "__STDC__ is not defined" << endl;
#endif
#ifdef __STDC_MB_MIGHT_NEQ_WC__
cout << "__STDC_MB_MIGHT_NEQ_WC__ is " << __STDC_MB_MIGHT_NEQ_WC__ << endl;
#else
cout << "__STDC_MB_MIGHT_NEQ_WC__ is not defined" << endl;
#endif
#ifdef __STDC_VERSION__
cout << "__STDC_VERSION__ is " << __STDC_VERSION__ << endl;
#else
cout << "__STDC_VERSION__ is not defined" << endl;
#endif
#ifdef __STDC_ISO_10646__
cout << "__STDC_ISO_10646__ is " << __STDC_ISO_10646__ << endl;
#else
cout << "__STDC_ISO_10646__ is not defined" << endl;
#endif
#ifdef __STDCPP_DEFAULT_NEW_ALIGNMENT__
cout << "__STDCPP_DEFAULT_NEW_ALIGNMENT__ is " << __STDCPP_DEFAULT_NEW_ALIGNMENT__ << endl;
#else
cout << "__STDCPP_DEFAULT_NEW_ALIGNMENT__ is not defined" << endl;
#endif
#ifdef __STDCPP_STRICT_POINTER_SAFETY__
cout << "__STDCPP_STRICT_POINTER_SAFETY__ is " << __STDCPP_STRICT_POINTER_SAFETY__ << endl;
#else
cout << "__STDCPP_STRICT_POINTER_SAFETY__ is not defined" << endl;
#endif
#ifdef __STDCPP_THREADS__
cout << "__STDCPP_THREADS__ is " << __STDCPP_THREADS__ << endl;
#else
cout << "__STDCPP_THREADS__ is not defined" << endl;
#endif
return 0;
}
// stdcpp.cc
I compiled the source file with clang 3.8.1 and ran the executable:
~/c++/stdcpp $ clang++38 --version clang version 3.8.1 (tags/RELEASE_381/final) Target: x86_64-unknown-freebsd10.3 Thread model: posix InstalledDir: /usr/local/llvm38/bin ~/c++/stdcpp $ clang++38 -o stdcpp -Wall -pedantic -O0 -g3 stdcpp.cc ~/c++/stdcpp $ ./stdcpp __cplusplus is 199711 __DATE__ is Aug 11 2016 __FILE__ is stdcpp.cc __LINE__ is 27 __STDC_HOSTED__ is 1 __TIME__ is 10:18:55 __STDC__ is 1 __STDC_MB_MIGHT_NEQ_WC__ is 1 __STDC_VERSION__ is not defined __STDC_ISO_10646__ is not defined __STDCPP_DEFAULT_NEW_ALIGNMENT__ is not defined __STDCPP_STRICT_POINTER_SAFETY__ is not defined __STDCPP_THREADS__ is not defined ~/c++/stdcpp $ clang++38 -o stdcpp -std=c++11 -Wall -pedantic -O0 -g3 stdcpp.cc ~/c++/stdcpp $ ./stdcpp __cplusplus is 201103 __DATE__ is Aug 11 2016 __FILE__ is stdcpp.cc __LINE__ is 27 __STDC_HOSTED__ is 1 __TIME__ is 10:19:08 __STDC__ is 1 __STDC_MB_MIGHT_NEQ_WC__ is 1 __STDC_VERSION__ is not defined __STDC_ISO_10646__ is not defined __STDCPP_DEFAULT_NEW_ALIGNMENT__ is not defined __STDCPP_STRICT_POINTER_SAFETY__ is not defined __STDCPP_THREADS__ is not defined ~/c++/stdcpp $ clang++38 -o stdcpp -std=c++14 -Wall -pedantic -O0 -g3 stdcpp.cc ~/c++/stdcpp $ ./stdcpp __cplusplus is 201402 __DATE__ is Aug 11 2016 __FILE__ is stdcpp.cc __LINE__ is 27 __STDC_HOSTED__ is 1 __TIME__ is 10:19:20 __STDC__ is 1 __STDC_MB_MIGHT_NEQ_WC__ is 1 __STDC_VERSION__ is not defined __STDC_ISO_10646__ is not defined __STDCPP_DEFAULT_NEW_ALIGNMENT__ is not defined __STDCPP_STRICT_POINTER_SAFETY__ is not defined __STDCPP_THREADS__ is not defined ~/c++/stdcpp $ clang++38 -o stdcpp -std=c++1z -Wall -pedantic -O0 -g3 stdcpp.cc ~/c++/stdcpp $ ./stdcpp __cplusplus is 201406 __DATE__ is Aug 11 2016 __FILE__ is stdcpp.cc __LINE__ is 27 __STDC_HOSTED__ is 1 __TIME__ is 10:19:31 __STDC__ is 1 __STDC_MB_MIGHT_NEQ_WC__ is 1 __STDC_VERSION__ is not defined __STDC_ISO_10646__ is not defined __STDCPP_DEFAULT_NEW_ALIGNMENT__ is not defined __STDCPP_STRICT_POINTER_SAFETY__ is not defined __STDCPP_THREADS__ is not defined