This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by configure, which was generated by GNU Autoconf 2.69. Invocation command line was $ ./configure --target=arm-buildroot-linux-gnueabi --host=arm-buildroot-linux-gnueabi --build=x86_64-pc-linux-gnu --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --localstatedir=/var --program-prefix= --disable-gtk-doc --disable-gtk-doc-html --disable-doc --disable-docs --disable-documentation --with-xmlto=no --with-fop=no --disable-dependency-tracking --enable-ipv6 --disable-nls --disable-static --enable-shared --disable-debuglibs --disable-libcap --disable-libusb --disable-libwebsockets --disable-lmsensors --enable-pcre --disable-python-tools --disable-capture-tools-only ## --------- ## ## Platform. ## ## --------- ## hostname = gcc159.bak.milne.osuosl.org uname -m = x86_64 uname -r = 4.9.0-16-amd64 uname -s = Linux uname -v = #1 SMP Debian 4.9.272-2 (2021-07-19) /usr/bin/uname -p = unknown /bin/uname -X = unknown /bin/arch = unknown /usr/bin/arch -k = unknown /usr/convex/getsysinfo = unknown /usr/bin/hostinfo = unknown /bin/machine = unknown /usr/bin/oslevel = unknown /bin/universe = unknown PATH: /home/buildroot/autobuild/instance-3/output-1/host/bin PATH: /home/buildroot/autobuild/instance-3/output-1/host/sbin PATH: /usr/local/sbin PATH: /usr/local/bin PATH: /usr/sbin PATH: /usr/bin PATH: /sbin PATH: /bin ## ----------- ## ## Core tests. ## ## ----------- ## configure:2465: checking build system type configure:2479: result: x86_64-pc-linux-gnu configure:2499: checking host system type configure:2512: result: arm-buildroot-linux-gnueabi configure:2542: checking for arm-buildroot-linux-gnueabi-gcc configure:2569: result: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc configure:2838: checking for C compiler version configure:2847: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc --version >&5 arm-none-linux-gnueabi-gcc (Sourcery CodeBench Lite 2014.05-29) 4.8.3 20140320 (prerelease) Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. configure:2858: $? = 0 configure:2847: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc -v >&5 Using built-in specs. COLLECT_GCC=/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/arm-none-linux-gnueabi-gcc COLLECT_LTO_WRAPPER=/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../libexec/gcc/arm-none-linux-gnueabi/4.8.3/lto-wrapper Target: arm-none-linux-gnueabi Configured with: /scratch/maciej/arm-linux-2014.05-rel/src/gcc-4.8-2014.05/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --enable-extra-sgxxlite-multilibs --with-arch=armv5te --with-gnu-as --with-gnu-ld --with-specs='%{save-temps: -fverbose-asm} %{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables} -D__CS_SOURCERYGXX_MAJ__=2014 -D__CS_SOURCERYGXX_MIN__=5 -D__CS_SOURCERYGXX_REV__=29' --enable-languages=c,c++ --enable-shared --enable-lto --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery CodeBench Lite 2014.05-29' --with-bugurl=https://sourcery.mentor.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/libc --with-gmp=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-mpfr=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-mpc=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-isl=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-cloog=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --disable-libgomp --disable-libitm --enable-libatomic --disable-libssp --enable-poison-system-directories --with-build-time-tools=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/bin SED=sed Thread model: posix gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29) COMPILER_PATH=/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../libexec/gcc/arm-none-linux-gnueabi/4.8.3/:/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../libexec/gcc/:/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3/../../../../arm-none-linux-gnueabi/bin/ LIBRARY_PATH=/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3/thumb2/:/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3/../../../../arm-none-linux-gnueabi/lib/thumb2/:/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3/:/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/:/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3/../../../../arm-none-linux-gnueabi/lib/:/home/buildroot/autobuild/instance-3/output-1/host/arm-buildroot-linux-gnueabi/sysroot/thumb2/lib/:/home/buildroot/autobuild/instance-3/output-1/host/arm-buildroot-linux-gnueabi/sysroot/thumb2/usr/lib/ COLLECT_GCC_OPTIONS='-mabi=aapcs-linux' '-mfpu=vfpv3-d16' '-mthumb' '-fstack-protector' '-mfloat-abi=softfp' '-mcpu=cortex-a8' '-fPIE' '-pie' '-v' '-mtls-dialect=gnu' '-D' '__CS_SOURCERYGXX_MAJ__=2014' '-D' '__CS_SOURCERYGXX_MIN__=5' '-D' '__CS_SOURCERYGXX_REV__=29' ... rest of stderr output deleted ... configure:2858: $? = 1 configure:2847: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc -V >&5 arm-none-linux-gnueabi-gcc: error: unrecognized command line option '-V' configure:2858: $? = 1 configure:2847: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc -qversion >&5 arm-none-linux-gnueabi-gcc: error: unrecognized command line option '-qversion' configure:2858: $? = 1 configure:2878: checking whether the C compiler works configure:2900: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c -latomic >&5 configure:2904: $? = 0 configure:2952: result: yes configure:2955: checking for C compiler default output file name configure:2957: result: a.out configure:2963: checking for suffix of executables configure:2970: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c -latomic >&5 configure:2974: $? = 0 configure:2996: result: configure:3018: checking whether we are cross compiling configure:3056: result: yes configure:3061: checking for suffix of object files configure:3083: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c >&5 configure:3087: $? = 0 configure:3108: result: o configure:3112: checking whether we are using the GNU C compiler configure:3131: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c >&5 configure:3131: $? = 0 configure:3140: result: yes configure:3149: checking whether /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc accepts -g configure:3169: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc -c -g -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c >&5 configure:3169: $? = 0 configure:3210: result: yes configure:3227: checking for /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc option to accept ISO C89 configure:3290: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c >&5 configure:3290: $? = 0 configure:3303: result: none needed configure:3327: checking for /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc option to accept ISO C99 configure:3476: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c >&5 conftest.c:59:29: error: expected ';', ',' or ')' before 'text' test_restrict (ccp restrict text) ^ conftest.c: In function 'main': conftest.c:113:18: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'newvar' char *restrict newvar = "Another string"; ^ conftest.c:113:18: error: 'newvar' undeclared (first use in this function) conftest.c:113:18: note: each undeclared identifier is reported only once for each function it appears in conftest.c:123:3: error: 'for' loop initial declarations are only allowed in C99 mode for (int i = 0; i < ia->datasize; ++i) ^ conftest.c:123:3: note: use option -std=c99 or -std=gnu99 to compile your code configure:3476: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | /* end confdefs.h. */ | #include | #include | #include | #include | #include | | // Check varargs macros. These examples are taken from C99 6.10.3.5. | #define debug(...) fprintf (stderr, __VA_ARGS__) | #define showlist(...) puts (#__VA_ARGS__) | #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) | static void | test_varargs_macros (void) | { | int x = 1234; | int y = 5678; | debug ("Flag"); | debug ("X = %d\n", x); | showlist (The first, second, and third items.); | report (x>y, "x is %d but y is %d", x, y); | } | | // Check long long types. | #define BIG64 18446744073709551615ull | #define BIG32 4294967295ul | #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) | #if !BIG_OK | your preprocessor is broken; | #endif | #if BIG_OK | #else | your preprocessor is broken; | #endif | static long long int bignum = -9223372036854775807LL; | static unsigned long long int ubignum = BIG64; | | struct incomplete_array | { | int datasize; | double data[]; | }; | | struct named_init { | int number; | const wchar_t *name; | double average; | }; | | typedef const char *ccp; | | static inline int | test_restrict (ccp restrict text) | { | // See if C++-style comments work. | // Iterate through items via the restricted pointer. | // Also check for declarations in for loops. | for (unsigned int i = 0; *(text+i) != '\0'; ++i) | continue; | return 0; | } | | // Check varargs and va_copy. | static void | test_varargs (const char *format, ...) | { | va_list args; | va_start (args, format); | va_list args_copy; | va_copy (args_copy, args); | | const char *str; | int number; | float fnumber; | | while (*format) | { | switch (*format++) | { | case 's': // string | str = va_arg (args_copy, const char *); | break; | case 'd': // int | number = va_arg (args_copy, int); | break; | case 'f': // float | fnumber = va_arg (args_copy, double); | break; | default: | break; | } | } | va_end (args_copy); | va_end (args); | } | | int | main () | { | | // Check bool. | _Bool success = false; | | // Check restrict. | if (test_restrict ("String literal") == 0) | success = true; | char *restrict newvar = "Another string"; | | // Check varargs. | test_varargs ("s, d' f .", "string", 65, 34.234); | test_varargs_macros (); | | // Check flexible array members. | struct incomplete_array *ia = | malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); | ia->datasize = 10; | for (int i = 0; i < ia->datasize; ++i) | ia->data[i] = i * 1.234; | | // Check named initializers. | struct named_init ni = { | .number = 34, | .name = L"Test wide string", | .average = 543.34343, | }; | | ni.number = 58; | | int dynamic_array[ni.number]; | dynamic_array[ni.number - 1] = 543; | | // work around unused variable warnings | return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' | || dynamic_array[ni.number - 1] != 543); | | ; | return 0; | } configure:3476: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc -std=gnu99 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c >&5 configure:3476: $? = 0 configure:3496: result: -std=gnu99 configure:3597: checking for /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc -std=gnu99 option to accept ISO Standard C configure:3611: result: -std=gnu99 configure:3727: checking for C++ compiler version configure:3736: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ --version >&5 arm-none-linux-gnueabi-g++ (Sourcery CodeBench Lite 2014.05-29) 4.8.3 20140320 (prerelease) Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. configure:3747: $? = 0 configure:3736: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -v >&5 Using built-in specs. COLLECT_GCC=/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/arm-none-linux-gnueabi-g++ COLLECT_LTO_WRAPPER=/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../libexec/gcc/arm-none-linux-gnueabi/4.8.3/lto-wrapper Target: arm-none-linux-gnueabi Configured with: /scratch/maciej/arm-linux-2014.05-rel/src/gcc-4.8-2014.05/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --enable-extra-sgxxlite-multilibs --with-arch=armv5te --with-gnu-as --with-gnu-ld --with-specs='%{save-temps: -fverbose-asm} %{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables} -D__CS_SOURCERYGXX_MAJ__=2014 -D__CS_SOURCERYGXX_MIN__=5 -D__CS_SOURCERYGXX_REV__=29' --enable-languages=c,c++ --enable-shared --enable-lto --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery CodeBench Lite 2014.05-29' --with-bugurl=https://sourcery.mentor.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/libc --with-gmp=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-mpfr=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-mpc=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-isl=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-cloog=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --disable-libgomp --disable-libitm --enable-libatomic --disable-libssp --enable-poison-system-directories --with-build-time-tools=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/bin SED=sed Thread model: posix gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29) COMPILER_PATH=/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../libexec/gcc/arm-none-linux-gnueabi/4.8.3/:/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../libexec/gcc/:/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3/../../../../arm-none-linux-gnueabi/bin/ LIBRARY_PATH=/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3/thumb2/:/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3/../../../../arm-none-linux-gnueabi/lib/thumb2/:/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3/:/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/:/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3/../../../../arm-none-linux-gnueabi/lib/:/home/buildroot/autobuild/instance-3/output-1/host/arm-buildroot-linux-gnueabi/sysroot/thumb2/lib/:/home/buildroot/autobuild/instance-3/output-1/host/arm-buildroot-linux-gnueabi/sysroot/thumb2/usr/lib/ COLLECT_GCC_OPTIONS='-mabi=aapcs-linux' '-mfpu=vfpv3-d16' '-mthumb' '-fstack-protector' '-mfloat-abi=softfp' '-mcpu=cortex-a8' '-fPIE' '-pie' '-v' '-shared-libgcc' '-mtls-dialect=gnu' '-D' '__CS_SOURCERYGXX_MAJ__=2014' '-D' '__CS_SOURCERYGXX_MIN__=5' '-D' '__CS_SOURCERYGXX_REV__=29' ... rest of stderr output deleted ... configure:3747: $? = 1 configure:3736: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -V >&5 arm-none-linux-gnueabi-g++: error: unrecognized command line option '-V' configure:3747: $? = 1 configure:3736: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -qversion >&5 arm-none-linux-gnueabi-g++: error: unrecognized command line option '-qversion' configure:3747: $? = 1 configure:3751: checking whether we are using the GNU C++ compiler configure:3770: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 configure:3770: $? = 0 configure:3779: result: yes configure:3788: checking whether /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ accepts -g configure:3808: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -c -g -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 configure:3808: $? = 0 configure:3849: result: yes configure:3886: checking for a BSD-compatible install configure:3954: result: /usr/bin/install -c configure:3965: checking whether make sets $(MAKE) configure:3987: result: yes configure:4001: checking how to run the C preprocessor configure:4071: result: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-cpp configure:4091: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-cpp -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c configure:4091: $? = 0 configure:4105: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-cpp -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.c conftest.c:9:28: fatal error: ac_nonexistent.h: No such file or directory #include ^ compilation terminated. configure:4105: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | /* end confdefs.h. */ | #include configure:4166: checking for platform-specific compiler flags configure:4280: result: none needed configure:4335: checking gcc version configure:4349: result: 4.8.3 configure:4405: checking whether /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ supports C++17 features with -std=gnu++17 configure:5199: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++17 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 arm-none-linux-gnueabi-g++: error: unrecognized command line option '-std=gnu++17' configure:5199: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | /* end confdefs.h. */ | | | // If the compiler admits that it is not ready for C++11, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201103L | | #error "This is not a C++11 compiler" | | #else | | namespace cxx11 | { | | namespace test_static_assert | { | | template | struct check | { | static_assert(sizeof(int) <= sizeof(T), "not big enough"); | }; | | } | | namespace test_final_override | { | | struct Base | { | virtual void f() {} | }; | | struct Derived : public Base | { | virtual void f() override {} | }; | | } | | namespace test_double_right_angle_brackets | { | | template < typename T > | struct check {}; | | typedef check single_type; | typedef check> double_type; | typedef check>> triple_type; | typedef check>>> quadruple_type; | | } | | namespace test_decltype | { | | int | f() | { | int a = 1; | decltype(a) b = 2; | return a + b; | } | | } | | namespace test_type_deduction | { | | template < typename T1, typename T2 > | struct is_same | { | static const bool value = false; | }; | | template < typename T > | struct is_same | { | static const bool value = true; | }; | | template < typename T1, typename T2 > | auto | add(T1 a1, T2 a2) -> decltype(a1 + a2) | { | return a1 + a2; | } | | int | test(const int c, volatile int v) | { | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == false, ""); | auto ac = c; | auto av = v; | auto sumi = ac + av + 'x'; | auto sumf = ac + av + 1.0; | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == true, ""); | return (sumf > 0.0) ? sumi : add(c, v); | } | | } | | namespace test_noexcept | { | | int f() { return 0; } | int g() noexcept { return 0; } | | static_assert(noexcept(f()) == false, ""); | static_assert(noexcept(g()) == true, ""); | | } | | namespace test_constexpr | { | | template < typename CharT > | unsigned long constexpr | strlen_c_r(const CharT *const s, const unsigned long acc) noexcept | { | return *s ? strlen_c_r(s + 1, acc + 1) : acc; | } | | template < typename CharT > | unsigned long constexpr | strlen_c(const CharT *const s) noexcept | { | return strlen_c_r(s, 0UL); | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("1") == 1UL, ""); | static_assert(strlen_c("example") == 7UL, ""); | static_assert(strlen_c("another\0example") == 7UL, ""); | | } | | namespace test_rvalue_references | { | | template < int N > | struct answer | { | static constexpr int value = N; | }; | | answer<1> f(int&) { return answer<1>(); } | answer<2> f(const int&) { return answer<2>(); } | answer<3> f(int&&) { return answer<3>(); } | | void | test() | { | int i = 0; | const int c = 0; | static_assert(decltype(f(i))::value == 1, ""); | static_assert(decltype(f(c))::value == 2, ""); | static_assert(decltype(f(0))::value == 3, ""); | } | | } | | namespace test_uniform_initialization | { | | struct test | { | static const int zero {}; | static const int one {1}; | }; | | static_assert(test::zero == 0, ""); | static_assert(test::one == 1, ""); | | } | | namespace test_lambdas | { | | void | test1() | { | auto lambda1 = [](){}; | auto lambda2 = lambda1; | lambda1(); | lambda2(); | } | | int | test2() | { | auto a = [](int i, int j){ return i + j; }(1, 2); | auto b = []() -> int { return '0'; }(); | auto c = [=](){ return a + b; }(); | auto d = [&](){ return c; }(); | auto e = [a, &b](int x) mutable { | const auto identity = [](int y){ return y; }; | for (auto i = 0; i < a; ++i) | a += b--; | return x + identity(a + b); | }(0); | return a + b + c + d + e; | } | | int | test3() | { | const auto nullary = [](){ return 0; }; | const auto unary = [](int x){ return x; }; | using nullary_t = decltype(nullary); | using unary_t = decltype(unary); | const auto higher1st = [](nullary_t f){ return f(); }; | const auto higher2nd = [unary](nullary_t f1){ | return [unary, f1](unary_t f2){ return f2(unary(f1())); }; | }; | return higher1st(nullary) + higher2nd(nullary)(unary); | } | | } | | namespace test_variadic_templates | { | | template | struct sum; | | template | struct sum | { | static constexpr auto value = N0 + sum::value; | }; | | template <> | struct sum<> | { | static constexpr auto value = 0; | }; | | static_assert(sum<>::value == 0, ""); | static_assert(sum<1>::value == 1, ""); | static_assert(sum<23>::value == 23, ""); | static_assert(sum<1, 2>::value == 3, ""); | static_assert(sum<5, 5, 11>::value == 21, ""); | static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); | | } | | // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae | // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function | // because of this. | namespace test_template_alias_sfinae | { | | struct foo {}; | | template | using member = typename T::member_type; | | template | void func(...) {} | | template | void func(member*) {} | | void test(); | | void test() { func(0); } | | } | | } // namespace cxx11 | | #endif // __cplusplus >= 201103L | | | | | // If the compiler admits that it is not ready for C++14, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201402L | | #error "This is not a C++14 compiler" | | #else | | namespace cxx14 | { | | namespace test_polymorphic_lambdas | { | | int | test() | { | const auto lambda = [](auto&&... args){ | const auto istiny = [](auto x){ | return (sizeof(x) == 1UL) ? 1 : 0; | }; | const int aretiny[] = { istiny(args)... }; | return aretiny[0]; | }; | return lambda(1, 1L, 1.0f, '1'); | } | | } | | namespace test_binary_literals | { | | constexpr auto ivii = 0b0000000000101010; | static_assert(ivii == 42, "wrong value"); | | } | | namespace test_generalized_constexpr | { | | template < typename CharT > | constexpr unsigned long | strlen_c(const CharT *const s) noexcept | { | auto length = 0UL; | for (auto p = s; *p; ++p) | ++length; | return length; | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("x") == 1UL, ""); | static_assert(strlen_c("test") == 4UL, ""); | static_assert(strlen_c("another\0test") == 7UL, ""); | | } | | namespace test_lambda_init_capture | { | | int | test() | { | auto x = 0; | const auto lambda1 = [a = x](int b){ return a + b; }; | const auto lambda2 = [a = lambda1(x)](){ return a; }; | return lambda2(); | } | | } | | namespace test_digit_separators | { | | constexpr auto ten_million = 100'000'000; | static_assert(ten_million == 100000000, ""); | | } | | namespace test_return_type_deduction | { | | auto f(int& x) { return x; } | decltype(auto) g(int& x) { return x; } | | template < typename T1, typename T2 > | struct is_same | { | static constexpr auto value = false; | }; | | template < typename T > | struct is_same | { | static constexpr auto value = true; | }; | | int | test() | { | auto x = 0; | static_assert(is_same::value, ""); | static_assert(is_same::value, ""); | return x; | } | | } | | } // namespace cxx14 | | #endif // __cplusplus >= 201402L | | | | | // If the compiler admits that it is not ready for C++17, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201703L | | #error "This is not a C++17 compiler" | | #else | | #include | #include | #include | | namespace cxx17 | { | | namespace test_constexpr_lambdas | { | | constexpr int foo = [](){return 42;}(); | | } | | namespace test::nested_namespace::definitions | { | | } | | namespace test_fold_expression | { | | template | int multiply(Args... args) | { | return (args * ... * 1); | } | | template | bool all(Args... args) | { | return (args && ...); | } | | } | | namespace test_extended_static_assert | { | | static_assert (true); | | } | | namespace test_auto_brace_init_list | { | | auto foo = {5}; | auto bar {5}; | | static_assert(std::is_same, decltype(foo)>::value); | static_assert(std::is_same::value); | } | | namespace test_typename_in_template_template_parameter | { | | template typename X> struct D; | | } | | namespace test_fallthrough_nodiscard_maybe_unused_attributes | { | | int f1() | { | return 42; | } | | [[nodiscard]] int f2() | { | [[maybe_unused]] auto unused = f1(); | | switch (f1()) | { | case 17: | f1(); | [[fallthrough]]; | case 42: | f1(); | } | return f1(); | } | | } | | namespace test_extended_aggregate_initialization | { | | struct base1 | { | int b1, b2 = 42; | }; | | struct base2 | { | base2() { | b3 = 42; | } | int b3; | }; | | struct derived : base1, base2 | { | int d; | }; | | derived d1 {{1, 2}, {}, 4}; // full initialization | derived d2 {{}, {}, 4}; // value-initialized bases | | } | | namespace test_general_range_based_for_loop | { | | struct iter | { | int i; | | int& operator* () | { | return i; | } | | const int& operator* () const | { | return i; | } | | iter& operator++() | { | ++i; | return *this; | } | }; | | struct sentinel | { | int i; | }; | | bool operator== (const iter& i, const sentinel& s) | { | return i.i == s.i; | } | | bool operator!= (const iter& i, const sentinel& s) | { | return !(i == s); | } | | struct range | { | iter begin() const | { | return {0}; | } | | sentinel end() const | { | return {5}; | } | }; | | void f() | { | range r {}; | | for (auto i : r) | { | [[maybe_unused]] auto v = i; | } | } | | } | | namespace test_lambda_capture_asterisk_this_by_value | { | | struct t | { | int i; | int foo() | { | return [*this]() | { | return i; | }(); | } | }; | | } | | namespace test_enum_class_construction | { | | enum class byte : unsigned char | {}; | | byte foo {42}; | | } | | namespace test_constexpr_if | { | | template | int f () | { | if constexpr(cond) | { | return 13; | } | else | { | return 42; | } | } | | } | | namespace test_selection_statement_with_initializer | { | | int f() | { | return 13; | } | | int f2() | { | if (auto i = f(); i > 0) | { | return 3; | } | | switch (auto i = f(); i + 4) | { | case 17: | return 2; | | default: | return 1; | } | } | | } | | namespace test_template_argument_deduction_for_class_templates | { | | template | struct pair | { | pair (T1 p1, T2 p2) | : m1 {p1}, | m2 {p2} | {} | | T1 m1; | T2 m2; | }; | | void f() | { | [[maybe_unused]] auto p = pair{13, 42u}; | } | | } | | namespace test_non_type_auto_template_parameters | { | | template | struct B | {}; | | B<5> b1; | B<'a'> b2; | | } | | namespace test_structured_bindings | { | | int arr[2] = { 1, 2 }; | std::pair pr = { 1, 2 }; | | auto f1() -> int(&)[2] | { | return arr; | } | | auto f2() -> std::pair& | { | return pr; | } | | struct S | { | int x1 : 2; | volatile double y1; | }; | | S f3() | { | return {}; | } | | auto [ x1, y1 ] = f1(); | auto& [ xr1, yr1 ] = f1(); | auto [ x2, y2 ] = f2(); | auto& [ xr2, yr2 ] = f2(); | const auto [ x3, y3 ] = f3(); | | } | | namespace test_exception_spec_type_system | { | | struct Good {}; | struct Bad {}; | | void g1() noexcept; | void g2(); | | template | Bad | f(T*, T*); | | template | Good | f(T1*, T2*); | | static_assert (std::is_same_v); | | } | | namespace test_inline_variables | { | | template void f(T) | {} | | template inline T g(T) | { | return T{}; | } | | template<> inline void f<>(int) | {} | | template<> int g<>(int) | { | return 5; | } | | } | | } // namespace cxx17 | | #endif // __cplusplus < 201703L | | | configure:5208: result: no configure:4405: checking whether /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ supports C++17 features with -std=gnu++1z configure:5199: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++1z -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 arm-none-linux-gnueabi-g++: error: unrecognized command line option '-std=gnu++1z' configure:5199: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | /* end confdefs.h. */ | | | // If the compiler admits that it is not ready for C++11, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201103L | | #error "This is not a C++11 compiler" | | #else | | namespace cxx11 | { | | namespace test_static_assert | { | | template | struct check | { | static_assert(sizeof(int) <= sizeof(T), "not big enough"); | }; | | } | | namespace test_final_override | { | | struct Base | { | virtual void f() {} | }; | | struct Derived : public Base | { | virtual void f() override {} | }; | | } | | namespace test_double_right_angle_brackets | { | | template < typename T > | struct check {}; | | typedef check single_type; | typedef check> double_type; | typedef check>> triple_type; | typedef check>>> quadruple_type; | | } | | namespace test_decltype | { | | int | f() | { | int a = 1; | decltype(a) b = 2; | return a + b; | } | | } | | namespace test_type_deduction | { | | template < typename T1, typename T2 > | struct is_same | { | static const bool value = false; | }; | | template < typename T > | struct is_same | { | static const bool value = true; | }; | | template < typename T1, typename T2 > | auto | add(T1 a1, T2 a2) -> decltype(a1 + a2) | { | return a1 + a2; | } | | int | test(const int c, volatile int v) | { | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == false, ""); | auto ac = c; | auto av = v; | auto sumi = ac + av + 'x'; | auto sumf = ac + av + 1.0; | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == true, ""); | return (sumf > 0.0) ? sumi : add(c, v); | } | | } | | namespace test_noexcept | { | | int f() { return 0; } | int g() noexcept { return 0; } | | static_assert(noexcept(f()) == false, ""); | static_assert(noexcept(g()) == true, ""); | | } | | namespace test_constexpr | { | | template < typename CharT > | unsigned long constexpr | strlen_c_r(const CharT *const s, const unsigned long acc) noexcept | { | return *s ? strlen_c_r(s + 1, acc + 1) : acc; | } | | template < typename CharT > | unsigned long constexpr | strlen_c(const CharT *const s) noexcept | { | return strlen_c_r(s, 0UL); | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("1") == 1UL, ""); | static_assert(strlen_c("example") == 7UL, ""); | static_assert(strlen_c("another\0example") == 7UL, ""); | | } | | namespace test_rvalue_references | { | | template < int N > | struct answer | { | static constexpr int value = N; | }; | | answer<1> f(int&) { return answer<1>(); } | answer<2> f(const int&) { return answer<2>(); } | answer<3> f(int&&) { return answer<3>(); } | | void | test() | { | int i = 0; | const int c = 0; | static_assert(decltype(f(i))::value == 1, ""); | static_assert(decltype(f(c))::value == 2, ""); | static_assert(decltype(f(0))::value == 3, ""); | } | | } | | namespace test_uniform_initialization | { | | struct test | { | static const int zero {}; | static const int one {1}; | }; | | static_assert(test::zero == 0, ""); | static_assert(test::one == 1, ""); | | } | | namespace test_lambdas | { | | void | test1() | { | auto lambda1 = [](){}; | auto lambda2 = lambda1; | lambda1(); | lambda2(); | } | | int | test2() | { | auto a = [](int i, int j){ return i + j; }(1, 2); | auto b = []() -> int { return '0'; }(); | auto c = [=](){ return a + b; }(); | auto d = [&](){ return c; }(); | auto e = [a, &b](int x) mutable { | const auto identity = [](int y){ return y; }; | for (auto i = 0; i < a; ++i) | a += b--; | return x + identity(a + b); | }(0); | return a + b + c + d + e; | } | | int | test3() | { | const auto nullary = [](){ return 0; }; | const auto unary = [](int x){ return x; }; | using nullary_t = decltype(nullary); | using unary_t = decltype(unary); | const auto higher1st = [](nullary_t f){ return f(); }; | const auto higher2nd = [unary](nullary_t f1){ | return [unary, f1](unary_t f2){ return f2(unary(f1())); }; | }; | return higher1st(nullary) + higher2nd(nullary)(unary); | } | | } | | namespace test_variadic_templates | { | | template | struct sum; | | template | struct sum | { | static constexpr auto value = N0 + sum::value; | }; | | template <> | struct sum<> | { | static constexpr auto value = 0; | }; | | static_assert(sum<>::value == 0, ""); | static_assert(sum<1>::value == 1, ""); | static_assert(sum<23>::value == 23, ""); | static_assert(sum<1, 2>::value == 3, ""); | static_assert(sum<5, 5, 11>::value == 21, ""); | static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); | | } | | // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae | // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function | // because of this. | namespace test_template_alias_sfinae | { | | struct foo {}; | | template | using member = typename T::member_type; | | template | void func(...) {} | | template | void func(member*) {} | | void test(); | | void test() { func(0); } | | } | | } // namespace cxx11 | | #endif // __cplusplus >= 201103L | | | | | // If the compiler admits that it is not ready for C++14, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201402L | | #error "This is not a C++14 compiler" | | #else | | namespace cxx14 | { | | namespace test_polymorphic_lambdas | { | | int | test() | { | const auto lambda = [](auto&&... args){ | const auto istiny = [](auto x){ | return (sizeof(x) == 1UL) ? 1 : 0; | }; | const int aretiny[] = { istiny(args)... }; | return aretiny[0]; | }; | return lambda(1, 1L, 1.0f, '1'); | } | | } | | namespace test_binary_literals | { | | constexpr auto ivii = 0b0000000000101010; | static_assert(ivii == 42, "wrong value"); | | } | | namespace test_generalized_constexpr | { | | template < typename CharT > | constexpr unsigned long | strlen_c(const CharT *const s) noexcept | { | auto length = 0UL; | for (auto p = s; *p; ++p) | ++length; | return length; | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("x") == 1UL, ""); | static_assert(strlen_c("test") == 4UL, ""); | static_assert(strlen_c("another\0test") == 7UL, ""); | | } | | namespace test_lambda_init_capture | { | | int | test() | { | auto x = 0; | const auto lambda1 = [a = x](int b){ return a + b; }; | const auto lambda2 = [a = lambda1(x)](){ return a; }; | return lambda2(); | } | | } | | namespace test_digit_separators | { | | constexpr auto ten_million = 100'000'000; | static_assert(ten_million == 100000000, ""); | | } | | namespace test_return_type_deduction | { | | auto f(int& x) { return x; } | decltype(auto) g(int& x) { return x; } | | template < typename T1, typename T2 > | struct is_same | { | static constexpr auto value = false; | }; | | template < typename T > | struct is_same | { | static constexpr auto value = true; | }; | | int | test() | { | auto x = 0; | static_assert(is_same::value, ""); | static_assert(is_same::value, ""); | return x; | } | | } | | } // namespace cxx14 | | #endif // __cplusplus >= 201402L | | | | | // If the compiler admits that it is not ready for C++17, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201703L | | #error "This is not a C++17 compiler" | | #else | | #include | #include | #include | | namespace cxx17 | { | | namespace test_constexpr_lambdas | { | | constexpr int foo = [](){return 42;}(); | | } | | namespace test::nested_namespace::definitions | { | | } | | namespace test_fold_expression | { | | template | int multiply(Args... args) | { | return (args * ... * 1); | } | | template | bool all(Args... args) | { | return (args && ...); | } | | } | | namespace test_extended_static_assert | { | | static_assert (true); | | } | | namespace test_auto_brace_init_list | { | | auto foo = {5}; | auto bar {5}; | | static_assert(std::is_same, decltype(foo)>::value); | static_assert(std::is_same::value); | } | | namespace test_typename_in_template_template_parameter | { | | template typename X> struct D; | | } | | namespace test_fallthrough_nodiscard_maybe_unused_attributes | { | | int f1() | { | return 42; | } | | [[nodiscard]] int f2() | { | [[maybe_unused]] auto unused = f1(); | | switch (f1()) | { | case 17: | f1(); | [[fallthrough]]; | case 42: | f1(); | } | return f1(); | } | | } | | namespace test_extended_aggregate_initialization | { | | struct base1 | { | int b1, b2 = 42; | }; | | struct base2 | { | base2() { | b3 = 42; | } | int b3; | }; | | struct derived : base1, base2 | { | int d; | }; | | derived d1 {{1, 2}, {}, 4}; // full initialization | derived d2 {{}, {}, 4}; // value-initialized bases | | } | | namespace test_general_range_based_for_loop | { | | struct iter | { | int i; | | int& operator* () | { | return i; | } | | const int& operator* () const | { | return i; | } | | iter& operator++() | { | ++i; | return *this; | } | }; | | struct sentinel | { | int i; | }; | | bool operator== (const iter& i, const sentinel& s) | { | return i.i == s.i; | } | | bool operator!= (const iter& i, const sentinel& s) | { | return !(i == s); | } | | struct range | { | iter begin() const | { | return {0}; | } | | sentinel end() const | { | return {5}; | } | }; | | void f() | { | range r {}; | | for (auto i : r) | { | [[maybe_unused]] auto v = i; | } | } | | } | | namespace test_lambda_capture_asterisk_this_by_value | { | | struct t | { | int i; | int foo() | { | return [*this]() | { | return i; | }(); | } | }; | | } | | namespace test_enum_class_construction | { | | enum class byte : unsigned char | {}; | | byte foo {42}; | | } | | namespace test_constexpr_if | { | | template | int f () | { | if constexpr(cond) | { | return 13; | } | else | { | return 42; | } | } | | } | | namespace test_selection_statement_with_initializer | { | | int f() | { | return 13; | } | | int f2() | { | if (auto i = f(); i > 0) | { | return 3; | } | | switch (auto i = f(); i + 4) | { | case 17: | return 2; | | default: | return 1; | } | } | | } | | namespace test_template_argument_deduction_for_class_templates | { | | template | struct pair | { | pair (T1 p1, T2 p2) | : m1 {p1}, | m2 {p2} | {} | | T1 m1; | T2 m2; | }; | | void f() | { | [[maybe_unused]] auto p = pair{13, 42u}; | } | | } | | namespace test_non_type_auto_template_parameters | { | | template | struct B | {}; | | B<5> b1; | B<'a'> b2; | | } | | namespace test_structured_bindings | { | | int arr[2] = { 1, 2 }; | std::pair pr = { 1, 2 }; | | auto f1() -> int(&)[2] | { | return arr; | } | | auto f2() -> std::pair& | { | return pr; | } | | struct S | { | int x1 : 2; | volatile double y1; | }; | | S f3() | { | return {}; | } | | auto [ x1, y1 ] = f1(); | auto& [ xr1, yr1 ] = f1(); | auto [ x2, y2 ] = f2(); | auto& [ xr2, yr2 ] = f2(); | const auto [ x3, y3 ] = f3(); | | } | | namespace test_exception_spec_type_system | { | | struct Good {}; | struct Bad {}; | | void g1() noexcept; | void g2(); | | template | Bad | f(T*, T*); | | template | Good | f(T1*, T2*); | | static_assert (std::is_same_v); | | } | | namespace test_inline_variables | { | | template void f(T) | {} | | template inline T g(T) | { | return T{}; | } | | template<> inline void f<>(int) | {} | | template<> int g<>(int) | { | return 5; | } | | } | | } // namespace cxx17 | | #endif // __cplusplus < 201703L | | | configure:5208: result: no configure:5225: checking whether /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ supports C++17 features with -std=c++17 configure:6019: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=c++17 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 arm-none-linux-gnueabi-g++: error: unrecognized command line option '-std=c++17' configure:6019: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | /* end confdefs.h. */ | | | // If the compiler admits that it is not ready for C++11, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201103L | | #error "This is not a C++11 compiler" | | #else | | namespace cxx11 | { | | namespace test_static_assert | { | | template | struct check | { | static_assert(sizeof(int) <= sizeof(T), "not big enough"); | }; | | } | | namespace test_final_override | { | | struct Base | { | virtual void f() {} | }; | | struct Derived : public Base | { | virtual void f() override {} | }; | | } | | namespace test_double_right_angle_brackets | { | | template < typename T > | struct check {}; | | typedef check single_type; | typedef check> double_type; | typedef check>> triple_type; | typedef check>>> quadruple_type; | | } | | namespace test_decltype | { | | int | f() | { | int a = 1; | decltype(a) b = 2; | return a + b; | } | | } | | namespace test_type_deduction | { | | template < typename T1, typename T2 > | struct is_same | { | static const bool value = false; | }; | | template < typename T > | struct is_same | { | static const bool value = true; | }; | | template < typename T1, typename T2 > | auto | add(T1 a1, T2 a2) -> decltype(a1 + a2) | { | return a1 + a2; | } | | int | test(const int c, volatile int v) | { | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == false, ""); | auto ac = c; | auto av = v; | auto sumi = ac + av + 'x'; | auto sumf = ac + av + 1.0; | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == true, ""); | return (sumf > 0.0) ? sumi : add(c, v); | } | | } | | namespace test_noexcept | { | | int f() { return 0; } | int g() noexcept { return 0; } | | static_assert(noexcept(f()) == false, ""); | static_assert(noexcept(g()) == true, ""); | | } | | namespace test_constexpr | { | | template < typename CharT > | unsigned long constexpr | strlen_c_r(const CharT *const s, const unsigned long acc) noexcept | { | return *s ? strlen_c_r(s + 1, acc + 1) : acc; | } | | template < typename CharT > | unsigned long constexpr | strlen_c(const CharT *const s) noexcept | { | return strlen_c_r(s, 0UL); | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("1") == 1UL, ""); | static_assert(strlen_c("example") == 7UL, ""); | static_assert(strlen_c("another\0example") == 7UL, ""); | | } | | namespace test_rvalue_references | { | | template < int N > | struct answer | { | static constexpr int value = N; | }; | | answer<1> f(int&) { return answer<1>(); } | answer<2> f(const int&) { return answer<2>(); } | answer<3> f(int&&) { return answer<3>(); } | | void | test() | { | int i = 0; | const int c = 0; | static_assert(decltype(f(i))::value == 1, ""); | static_assert(decltype(f(c))::value == 2, ""); | static_assert(decltype(f(0))::value == 3, ""); | } | | } | | namespace test_uniform_initialization | { | | struct test | { | static const int zero {}; | static const int one {1}; | }; | | static_assert(test::zero == 0, ""); | static_assert(test::one == 1, ""); | | } | | namespace test_lambdas | { | | void | test1() | { | auto lambda1 = [](){}; | auto lambda2 = lambda1; | lambda1(); | lambda2(); | } | | int | test2() | { | auto a = [](int i, int j){ return i + j; }(1, 2); | auto b = []() -> int { return '0'; }(); | auto c = [=](){ return a + b; }(); | auto d = [&](){ return c; }(); | auto e = [a, &b](int x) mutable { | const auto identity = [](int y){ return y; }; | for (auto i = 0; i < a; ++i) | a += b--; | return x + identity(a + b); | }(0); | return a + b + c + d + e; | } | | int | test3() | { | const auto nullary = [](){ return 0; }; | const auto unary = [](int x){ return x; }; | using nullary_t = decltype(nullary); | using unary_t = decltype(unary); | const auto higher1st = [](nullary_t f){ return f(); }; | const auto higher2nd = [unary](nullary_t f1){ | return [unary, f1](unary_t f2){ return f2(unary(f1())); }; | }; | return higher1st(nullary) + higher2nd(nullary)(unary); | } | | } | | namespace test_variadic_templates | { | | template | struct sum; | | template | struct sum | { | static constexpr auto value = N0 + sum::value; | }; | | template <> | struct sum<> | { | static constexpr auto value = 0; | }; | | static_assert(sum<>::value == 0, ""); | static_assert(sum<1>::value == 1, ""); | static_assert(sum<23>::value == 23, ""); | static_assert(sum<1, 2>::value == 3, ""); | static_assert(sum<5, 5, 11>::value == 21, ""); | static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); | | } | | // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae | // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function | // because of this. | namespace test_template_alias_sfinae | { | | struct foo {}; | | template | using member = typename T::member_type; | | template | void func(...) {} | | template | void func(member*) {} | | void test(); | | void test() { func(0); } | | } | | } // namespace cxx11 | | #endif // __cplusplus >= 201103L | | | | | // If the compiler admits that it is not ready for C++14, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201402L | | #error "This is not a C++14 compiler" | | #else | | namespace cxx14 | { | | namespace test_polymorphic_lambdas | { | | int | test() | { | const auto lambda = [](auto&&... args){ | const auto istiny = [](auto x){ | return (sizeof(x) == 1UL) ? 1 : 0; | }; | const int aretiny[] = { istiny(args)... }; | return aretiny[0]; | }; | return lambda(1, 1L, 1.0f, '1'); | } | | } | | namespace test_binary_literals | { | | constexpr auto ivii = 0b0000000000101010; | static_assert(ivii == 42, "wrong value"); | | } | | namespace test_generalized_constexpr | { | | template < typename CharT > | constexpr unsigned long | strlen_c(const CharT *const s) noexcept | { | auto length = 0UL; | for (auto p = s; *p; ++p) | ++length; | return length; | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("x") == 1UL, ""); | static_assert(strlen_c("test") == 4UL, ""); | static_assert(strlen_c("another\0test") == 7UL, ""); | | } | | namespace test_lambda_init_capture | { | | int | test() | { | auto x = 0; | const auto lambda1 = [a = x](int b){ return a + b; }; | const auto lambda2 = [a = lambda1(x)](){ return a; }; | return lambda2(); | } | | } | | namespace test_digit_separators | { | | constexpr auto ten_million = 100'000'000; | static_assert(ten_million == 100000000, ""); | | } | | namespace test_return_type_deduction | { | | auto f(int& x) { return x; } | decltype(auto) g(int& x) { return x; } | | template < typename T1, typename T2 > | struct is_same | { | static constexpr auto value = false; | }; | | template < typename T > | struct is_same | { | static constexpr auto value = true; | }; | | int | test() | { | auto x = 0; | static_assert(is_same::value, ""); | static_assert(is_same::value, ""); | return x; | } | | } | | } // namespace cxx14 | | #endif // __cplusplus >= 201402L | | | | | // If the compiler admits that it is not ready for C++17, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201703L | | #error "This is not a C++17 compiler" | | #else | | #include | #include | #include | | namespace cxx17 | { | | namespace test_constexpr_lambdas | { | | constexpr int foo = [](){return 42;}(); | | } | | namespace test::nested_namespace::definitions | { | | } | | namespace test_fold_expression | { | | template | int multiply(Args... args) | { | return (args * ... * 1); | } | | template | bool all(Args... args) | { | return (args && ...); | } | | } | | namespace test_extended_static_assert | { | | static_assert (true); | | } | | namespace test_auto_brace_init_list | { | | auto foo = {5}; | auto bar {5}; | | static_assert(std::is_same, decltype(foo)>::value); | static_assert(std::is_same::value); | } | | namespace test_typename_in_template_template_parameter | { | | template typename X> struct D; | | } | | namespace test_fallthrough_nodiscard_maybe_unused_attributes | { | | int f1() | { | return 42; | } | | [[nodiscard]] int f2() | { | [[maybe_unused]] auto unused = f1(); | | switch (f1()) | { | case 17: | f1(); | [[fallthrough]]; | case 42: | f1(); | } | return f1(); | } | | } | | namespace test_extended_aggregate_initialization | { | | struct base1 | { | int b1, b2 = 42; | }; | | struct base2 | { | base2() { | b3 = 42; | } | int b3; | }; | | struct derived : base1, base2 | { | int d; | }; | | derived d1 {{1, 2}, {}, 4}; // full initialization | derived d2 {{}, {}, 4}; // value-initialized bases | | } | | namespace test_general_range_based_for_loop | { | | struct iter | { | int i; | | int& operator* () | { | return i; | } | | const int& operator* () const | { | return i; | } | | iter& operator++() | { | ++i; | return *this; | } | }; | | struct sentinel | { | int i; | }; | | bool operator== (const iter& i, const sentinel& s) | { | return i.i == s.i; | } | | bool operator!= (const iter& i, const sentinel& s) | { | return !(i == s); | } | | struct range | { | iter begin() const | { | return {0}; | } | | sentinel end() const | { | return {5}; | } | }; | | void f() | { | range r {}; | | for (auto i : r) | { | [[maybe_unused]] auto v = i; | } | } | | } | | namespace test_lambda_capture_asterisk_this_by_value | { | | struct t | { | int i; | int foo() | { | return [*this]() | { | return i; | }(); | } | }; | | } | | namespace test_enum_class_construction | { | | enum class byte : unsigned char | {}; | | byte foo {42}; | | } | | namespace test_constexpr_if | { | | template | int f () | { | if constexpr(cond) | { | return 13; | } | else | { | return 42; | } | } | | } | | namespace test_selection_statement_with_initializer | { | | int f() | { | return 13; | } | | int f2() | { | if (auto i = f(); i > 0) | { | return 3; | } | | switch (auto i = f(); i + 4) | { | case 17: | return 2; | | default: | return 1; | } | } | | } | | namespace test_template_argument_deduction_for_class_templates | { | | template | struct pair | { | pair (T1 p1, T2 p2) | : m1 {p1}, | m2 {p2} | {} | | T1 m1; | T2 m2; | }; | | void f() | { | [[maybe_unused]] auto p = pair{13, 42u}; | } | | } | | namespace test_non_type_auto_template_parameters | { | | template | struct B | {}; | | B<5> b1; | B<'a'> b2; | | } | | namespace test_structured_bindings | { | | int arr[2] = { 1, 2 }; | std::pair pr = { 1, 2 }; | | auto f1() -> int(&)[2] | { | return arr; | } | | auto f2() -> std::pair& | { | return pr; | } | | struct S | { | int x1 : 2; | volatile double y1; | }; | | S f3() | { | return {}; | } | | auto [ x1, y1 ] = f1(); | auto& [ xr1, yr1 ] = f1(); | auto [ x2, y2 ] = f2(); | auto& [ xr2, yr2 ] = f2(); | const auto [ x3, y3 ] = f3(); | | } | | namespace test_exception_spec_type_system | { | | struct Good {}; | struct Bad {}; | | void g1() noexcept; | void g2(); | | template | Bad | f(T*, T*); | | template | Good | f(T1*, T2*); | | static_assert (std::is_same_v); | | } | | namespace test_inline_variables | { | | template void f(T) | {} | | template inline T g(T) | { | return T{}; | } | | template<> inline void f<>(int) | {} | | template<> int g<>(int) | { | return 5; | } | | } | | } // namespace cxx17 | | #endif // __cplusplus < 201703L | | | configure:6028: result: no configure:5225: checking whether /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ supports C++17 features with +std=c++17 configure:6019: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ +std=c++17 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 arm-none-linux-gnueabi-g++: error: +std=c++17: No such file or directory configure:6019: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | /* end confdefs.h. */ | | | // If the compiler admits that it is not ready for C++11, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201103L | | #error "This is not a C++11 compiler" | | #else | | namespace cxx11 | { | | namespace test_static_assert | { | | template | struct check | { | static_assert(sizeof(int) <= sizeof(T), "not big enough"); | }; | | } | | namespace test_final_override | { | | struct Base | { | virtual void f() {} | }; | | struct Derived : public Base | { | virtual void f() override {} | }; | | } | | namespace test_double_right_angle_brackets | { | | template < typename T > | struct check {}; | | typedef check single_type; | typedef check> double_type; | typedef check>> triple_type; | typedef check>>> quadruple_type; | | } | | namespace test_decltype | { | | int | f() | { | int a = 1; | decltype(a) b = 2; | return a + b; | } | | } | | namespace test_type_deduction | { | | template < typename T1, typename T2 > | struct is_same | { | static const bool value = false; | }; | | template < typename T > | struct is_same | { | static const bool value = true; | }; | | template < typename T1, typename T2 > | auto | add(T1 a1, T2 a2) -> decltype(a1 + a2) | { | return a1 + a2; | } | | int | test(const int c, volatile int v) | { | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == false, ""); | auto ac = c; | auto av = v; | auto sumi = ac + av + 'x'; | auto sumf = ac + av + 1.0; | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == true, ""); | return (sumf > 0.0) ? sumi : add(c, v); | } | | } | | namespace test_noexcept | { | | int f() { return 0; } | int g() noexcept { return 0; } | | static_assert(noexcept(f()) == false, ""); | static_assert(noexcept(g()) == true, ""); | | } | | namespace test_constexpr | { | | template < typename CharT > | unsigned long constexpr | strlen_c_r(const CharT *const s, const unsigned long acc) noexcept | { | return *s ? strlen_c_r(s + 1, acc + 1) : acc; | } | | template < typename CharT > | unsigned long constexpr | strlen_c(const CharT *const s) noexcept | { | return strlen_c_r(s, 0UL); | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("1") == 1UL, ""); | static_assert(strlen_c("example") == 7UL, ""); | static_assert(strlen_c("another\0example") == 7UL, ""); | | } | | namespace test_rvalue_references | { | | template < int N > | struct answer | { | static constexpr int value = N; | }; | | answer<1> f(int&) { return answer<1>(); } | answer<2> f(const int&) { return answer<2>(); } | answer<3> f(int&&) { return answer<3>(); } | | void | test() | { | int i = 0; | const int c = 0; | static_assert(decltype(f(i))::value == 1, ""); | static_assert(decltype(f(c))::value == 2, ""); | static_assert(decltype(f(0))::value == 3, ""); | } | | } | | namespace test_uniform_initialization | { | | struct test | { | static const int zero {}; | static const int one {1}; | }; | | static_assert(test::zero == 0, ""); | static_assert(test::one == 1, ""); | | } | | namespace test_lambdas | { | | void | test1() | { | auto lambda1 = [](){}; | auto lambda2 = lambda1; | lambda1(); | lambda2(); | } | | int | test2() | { | auto a = [](int i, int j){ return i + j; }(1, 2); | auto b = []() -> int { return '0'; }(); | auto c = [=](){ return a + b; }(); | auto d = [&](){ return c; }(); | auto e = [a, &b](int x) mutable { | const auto identity = [](int y){ return y; }; | for (auto i = 0; i < a; ++i) | a += b--; | return x + identity(a + b); | }(0); | return a + b + c + d + e; | } | | int | test3() | { | const auto nullary = [](){ return 0; }; | const auto unary = [](int x){ return x; }; | using nullary_t = decltype(nullary); | using unary_t = decltype(unary); | const auto higher1st = [](nullary_t f){ return f(); }; | const auto higher2nd = [unary](nullary_t f1){ | return [unary, f1](unary_t f2){ return f2(unary(f1())); }; | }; | return higher1st(nullary) + higher2nd(nullary)(unary); | } | | } | | namespace test_variadic_templates | { | | template | struct sum; | | template | struct sum | { | static constexpr auto value = N0 + sum::value; | }; | | template <> | struct sum<> | { | static constexpr auto value = 0; | }; | | static_assert(sum<>::value == 0, ""); | static_assert(sum<1>::value == 1, ""); | static_assert(sum<23>::value == 23, ""); | static_assert(sum<1, 2>::value == 3, ""); | static_assert(sum<5, 5, 11>::value == 21, ""); | static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); | | } | | // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae | // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function | // because of this. | namespace test_template_alias_sfinae | { | | struct foo {}; | | template | using member = typename T::member_type; | | template | void func(...) {} | | template | void func(member*) {} | | void test(); | | void test() { func(0); } | | } | | } // namespace cxx11 | | #endif // __cplusplus >= 201103L | | | | | // If the compiler admits that it is not ready for C++14, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201402L | | #error "This is not a C++14 compiler" | | #else | | namespace cxx14 | { | | namespace test_polymorphic_lambdas | { | | int | test() | { | const auto lambda = [](auto&&... args){ | const auto istiny = [](auto x){ | return (sizeof(x) == 1UL) ? 1 : 0; | }; | const int aretiny[] = { istiny(args)... }; | return aretiny[0]; | }; | return lambda(1, 1L, 1.0f, '1'); | } | | } | | namespace test_binary_literals | { | | constexpr auto ivii = 0b0000000000101010; | static_assert(ivii == 42, "wrong value"); | | } | | namespace test_generalized_constexpr | { | | template < typename CharT > | constexpr unsigned long | strlen_c(const CharT *const s) noexcept | { | auto length = 0UL; | for (auto p = s; *p; ++p) | ++length; | return length; | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("x") == 1UL, ""); | static_assert(strlen_c("test") == 4UL, ""); | static_assert(strlen_c("another\0test") == 7UL, ""); | | } | | namespace test_lambda_init_capture | { | | int | test() | { | auto x = 0; | const auto lambda1 = [a = x](int b){ return a + b; }; | const auto lambda2 = [a = lambda1(x)](){ return a; }; | return lambda2(); | } | | } | | namespace test_digit_separators | { | | constexpr auto ten_million = 100'000'000; | static_assert(ten_million == 100000000, ""); | | } | | namespace test_return_type_deduction | { | | auto f(int& x) { return x; } | decltype(auto) g(int& x) { return x; } | | template < typename T1, typename T2 > | struct is_same | { | static constexpr auto value = false; | }; | | template < typename T > | struct is_same | { | static constexpr auto value = true; | }; | | int | test() | { | auto x = 0; | static_assert(is_same::value, ""); | static_assert(is_same::value, ""); | return x; | } | | } | | } // namespace cxx14 | | #endif // __cplusplus >= 201402L | | | | | // If the compiler admits that it is not ready for C++17, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201703L | | #error "This is not a C++17 compiler" | | #else | | #include | #include | #include | | namespace cxx17 | { | | namespace test_constexpr_lambdas | { | | constexpr int foo = [](){return 42;}(); | | } | | namespace test::nested_namespace::definitions | { | | } | | namespace test_fold_expression | { | | template | int multiply(Args... args) | { | return (args * ... * 1); | } | | template | bool all(Args... args) | { | return (args && ...); | } | | } | | namespace test_extended_static_assert | { | | static_assert (true); | | } | | namespace test_auto_brace_init_list | { | | auto foo = {5}; | auto bar {5}; | | static_assert(std::is_same, decltype(foo)>::value); | static_assert(std::is_same::value); | } | | namespace test_typename_in_template_template_parameter | { | | template typename X> struct D; | | } | | namespace test_fallthrough_nodiscard_maybe_unused_attributes | { | | int f1() | { | return 42; | } | | [[nodiscard]] int f2() | { | [[maybe_unused]] auto unused = f1(); | | switch (f1()) | { | case 17: | f1(); | [[fallthrough]]; | case 42: | f1(); | } | return f1(); | } | | } | | namespace test_extended_aggregate_initialization | { | | struct base1 | { | int b1, b2 = 42; | }; | | struct base2 | { | base2() { | b3 = 42; | } | int b3; | }; | | struct derived : base1, base2 | { | int d; | }; | | derived d1 {{1, 2}, {}, 4}; // full initialization | derived d2 {{}, {}, 4}; // value-initialized bases | | } | | namespace test_general_range_based_for_loop | { | | struct iter | { | int i; | | int& operator* () | { | return i; | } | | const int& operator* () const | { | return i; | } | | iter& operator++() | { | ++i; | return *this; | } | }; | | struct sentinel | { | int i; | }; | | bool operator== (const iter& i, const sentinel& s) | { | return i.i == s.i; | } | | bool operator!= (const iter& i, const sentinel& s) | { | return !(i == s); | } | | struct range | { | iter begin() const | { | return {0}; | } | | sentinel end() const | { | return {5}; | } | }; | | void f() | { | range r {}; | | for (auto i : r) | { | [[maybe_unused]] auto v = i; | } | } | | } | | namespace test_lambda_capture_asterisk_this_by_value | { | | struct t | { | int i; | int foo() | { | return [*this]() | { | return i; | }(); | } | }; | | } | | namespace test_enum_class_construction | { | | enum class byte : unsigned char | {}; | | byte foo {42}; | | } | | namespace test_constexpr_if | { | | template | int f () | { | if constexpr(cond) | { | return 13; | } | else | { | return 42; | } | } | | } | | namespace test_selection_statement_with_initializer | { | | int f() | { | return 13; | } | | int f2() | { | if (auto i = f(); i > 0) | { | return 3; | } | | switch (auto i = f(); i + 4) | { | case 17: | return 2; | | default: | return 1; | } | } | | } | | namespace test_template_argument_deduction_for_class_templates | { | | template | struct pair | { | pair (T1 p1, T2 p2) | : m1 {p1}, | m2 {p2} | {} | | T1 m1; | T2 m2; | }; | | void f() | { | [[maybe_unused]] auto p = pair{13, 42u}; | } | | } | | namespace test_non_type_auto_template_parameters | { | | template | struct B | {}; | | B<5> b1; | B<'a'> b2; | | } | | namespace test_structured_bindings | { | | int arr[2] = { 1, 2 }; | std::pair pr = { 1, 2 }; | | auto f1() -> int(&)[2] | { | return arr; | } | | auto f2() -> std::pair& | { | return pr; | } | | struct S | { | int x1 : 2; | volatile double y1; | }; | | S f3() | { | return {}; | } | | auto [ x1, y1 ] = f1(); | auto& [ xr1, yr1 ] = f1(); | auto [ x2, y2 ] = f2(); | auto& [ xr2, yr2 ] = f2(); | const auto [ x3, y3 ] = f3(); | | } | | namespace test_exception_spec_type_system | { | | struct Good {}; | struct Bad {}; | | void g1() noexcept; | void g2(); | | template | Bad | f(T*, T*); | | template | Good | f(T1*, T2*); | | static_assert (std::is_same_v); | | } | | namespace test_inline_variables | { | | template void f(T) | {} | | template inline T g(T) | { | return T{}; | } | | template<> inline void f<>(int) | {} | | template<> int g<>(int) | { | return 5; | } | | } | | } // namespace cxx17 | | #endif // __cplusplus < 201703L | | | configure:6028: result: no configure:5225: checking whether /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ supports C++17 features with -h std=c++17 configure:6019: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -h std=c++17 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 conftest.cpp:24:2: error: #error "This is not a C++11 compiler" #error "This is not a C++11 compiler" ^ conftest.cpp:309:2: error: #error "This is not a C++14 compiler" #error "This is not a C++14 compiler" ^ conftest.cpp:429:2: error: #error "This is not a C++17 compiler" #error "This is not a C++17 compiler" ^ configure:6019: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | /* end confdefs.h. */ | | | // If the compiler admits that it is not ready for C++11, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201103L | | #error "This is not a C++11 compiler" | | #else | | namespace cxx11 | { | | namespace test_static_assert | { | | template | struct check | { | static_assert(sizeof(int) <= sizeof(T), "not big enough"); | }; | | } | | namespace test_final_override | { | | struct Base | { | virtual void f() {} | }; | | struct Derived : public Base | { | virtual void f() override {} | }; | | } | | namespace test_double_right_angle_brackets | { | | template < typename T > | struct check {}; | | typedef check single_type; | typedef check> double_type; | typedef check>> triple_type; | typedef check>>> quadruple_type; | | } | | namespace test_decltype | { | | int | f() | { | int a = 1; | decltype(a) b = 2; | return a + b; | } | | } | | namespace test_type_deduction | { | | template < typename T1, typename T2 > | struct is_same | { | static const bool value = false; | }; | | template < typename T > | struct is_same | { | static const bool value = true; | }; | | template < typename T1, typename T2 > | auto | add(T1 a1, T2 a2) -> decltype(a1 + a2) | { | return a1 + a2; | } | | int | test(const int c, volatile int v) | { | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == false, ""); | auto ac = c; | auto av = v; | auto sumi = ac + av + 'x'; | auto sumf = ac + av + 1.0; | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == true, ""); | return (sumf > 0.0) ? sumi : add(c, v); | } | | } | | namespace test_noexcept | { | | int f() { return 0; } | int g() noexcept { return 0; } | | static_assert(noexcept(f()) == false, ""); | static_assert(noexcept(g()) == true, ""); | | } | | namespace test_constexpr | { | | template < typename CharT > | unsigned long constexpr | strlen_c_r(const CharT *const s, const unsigned long acc) noexcept | { | return *s ? strlen_c_r(s + 1, acc + 1) : acc; | } | | template < typename CharT > | unsigned long constexpr | strlen_c(const CharT *const s) noexcept | { | return strlen_c_r(s, 0UL); | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("1") == 1UL, ""); | static_assert(strlen_c("example") == 7UL, ""); | static_assert(strlen_c("another\0example") == 7UL, ""); | | } | | namespace test_rvalue_references | { | | template < int N > | struct answer | { | static constexpr int value = N; | }; | | answer<1> f(int&) { return answer<1>(); } | answer<2> f(const int&) { return answer<2>(); } | answer<3> f(int&&) { return answer<3>(); } | | void | test() | { | int i = 0; | const int c = 0; | static_assert(decltype(f(i))::value == 1, ""); | static_assert(decltype(f(c))::value == 2, ""); | static_assert(decltype(f(0))::value == 3, ""); | } | | } | | namespace test_uniform_initialization | { | | struct test | { | static const int zero {}; | static const int one {1}; | }; | | static_assert(test::zero == 0, ""); | static_assert(test::one == 1, ""); | | } | | namespace test_lambdas | { | | void | test1() | { | auto lambda1 = [](){}; | auto lambda2 = lambda1; | lambda1(); | lambda2(); | } | | int | test2() | { | auto a = [](int i, int j){ return i + j; }(1, 2); | auto b = []() -> int { return '0'; }(); | auto c = [=](){ return a + b; }(); | auto d = [&](){ return c; }(); | auto e = [a, &b](int x) mutable { | const auto identity = [](int y){ return y; }; | for (auto i = 0; i < a; ++i) | a += b--; | return x + identity(a + b); | }(0); | return a + b + c + d + e; | } | | int | test3() | { | const auto nullary = [](){ return 0; }; | const auto unary = [](int x){ return x; }; | using nullary_t = decltype(nullary); | using unary_t = decltype(unary); | const auto higher1st = [](nullary_t f){ return f(); }; | const auto higher2nd = [unary](nullary_t f1){ | return [unary, f1](unary_t f2){ return f2(unary(f1())); }; | }; | return higher1st(nullary) + higher2nd(nullary)(unary); | } | | } | | namespace test_variadic_templates | { | | template | struct sum; | | template | struct sum | { | static constexpr auto value = N0 + sum::value; | }; | | template <> | struct sum<> | { | static constexpr auto value = 0; | }; | | static_assert(sum<>::value == 0, ""); | static_assert(sum<1>::value == 1, ""); | static_assert(sum<23>::value == 23, ""); | static_assert(sum<1, 2>::value == 3, ""); | static_assert(sum<5, 5, 11>::value == 21, ""); | static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); | | } | | // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae | // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function | // because of this. | namespace test_template_alias_sfinae | { | | struct foo {}; | | template | using member = typename T::member_type; | | template | void func(...) {} | | template | void func(member*) {} | | void test(); | | void test() { func(0); } | | } | | } // namespace cxx11 | | #endif // __cplusplus >= 201103L | | | | | // If the compiler admits that it is not ready for C++14, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201402L | | #error "This is not a C++14 compiler" | | #else | | namespace cxx14 | { | | namespace test_polymorphic_lambdas | { | | int | test() | { | const auto lambda = [](auto&&... args){ | const auto istiny = [](auto x){ | return (sizeof(x) == 1UL) ? 1 : 0; | }; | const int aretiny[] = { istiny(args)... }; | return aretiny[0]; | }; | return lambda(1, 1L, 1.0f, '1'); | } | | } | | namespace test_binary_literals | { | | constexpr auto ivii = 0b0000000000101010; | static_assert(ivii == 42, "wrong value"); | | } | | namespace test_generalized_constexpr | { | | template < typename CharT > | constexpr unsigned long | strlen_c(const CharT *const s) noexcept | { | auto length = 0UL; | for (auto p = s; *p; ++p) | ++length; | return length; | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("x") == 1UL, ""); | static_assert(strlen_c("test") == 4UL, ""); | static_assert(strlen_c("another\0test") == 7UL, ""); | | } | | namespace test_lambda_init_capture | { | | int | test() | { | auto x = 0; | const auto lambda1 = [a = x](int b){ return a + b; }; | const auto lambda2 = [a = lambda1(x)](){ return a; }; | return lambda2(); | } | | } | | namespace test_digit_separators | { | | constexpr auto ten_million = 100'000'000; | static_assert(ten_million == 100000000, ""); | | } | | namespace test_return_type_deduction | { | | auto f(int& x) { return x; } | decltype(auto) g(int& x) { return x; } | | template < typename T1, typename T2 > | struct is_same | { | static constexpr auto value = false; | }; | | template < typename T > | struct is_same | { | static constexpr auto value = true; | }; | | int | test() | { | auto x = 0; | static_assert(is_same::value, ""); | static_assert(is_same::value, ""); | return x; | } | | } | | } // namespace cxx14 | | #endif // __cplusplus >= 201402L | | | | | // If the compiler admits that it is not ready for C++17, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201703L | | #error "This is not a C++17 compiler" | | #else | | #include | #include | #include | | namespace cxx17 | { | | namespace test_constexpr_lambdas | { | | constexpr int foo = [](){return 42;}(); | | } | | namespace test::nested_namespace::definitions | { | | } | | namespace test_fold_expression | { | | template | int multiply(Args... args) | { | return (args * ... * 1); | } | | template | bool all(Args... args) | { | return (args && ...); | } | | } | | namespace test_extended_static_assert | { | | static_assert (true); | | } | | namespace test_auto_brace_init_list | { | | auto foo = {5}; | auto bar {5}; | | static_assert(std::is_same, decltype(foo)>::value); | static_assert(std::is_same::value); | } | | namespace test_typename_in_template_template_parameter | { | | template typename X> struct D; | | } | | namespace test_fallthrough_nodiscard_maybe_unused_attributes | { | | int f1() | { | return 42; | } | | [[nodiscard]] int f2() | { | [[maybe_unused]] auto unused = f1(); | | switch (f1()) | { | case 17: | f1(); | [[fallthrough]]; | case 42: | f1(); | } | return f1(); | } | | } | | namespace test_extended_aggregate_initialization | { | | struct base1 | { | int b1, b2 = 42; | }; | | struct base2 | { | base2() { | b3 = 42; | } | int b3; | }; | | struct derived : base1, base2 | { | int d; | }; | | derived d1 {{1, 2}, {}, 4}; // full initialization | derived d2 {{}, {}, 4}; // value-initialized bases | | } | | namespace test_general_range_based_for_loop | { | | struct iter | { | int i; | | int& operator* () | { | return i; | } | | const int& operator* () const | { | return i; | } | | iter& operator++() | { | ++i; | return *this; | } | }; | | struct sentinel | { | int i; | }; | | bool operator== (const iter& i, const sentinel& s) | { | return i.i == s.i; | } | | bool operator!= (const iter& i, const sentinel& s) | { | return !(i == s); | } | | struct range | { | iter begin() const | { | return {0}; | } | | sentinel end() const | { | return {5}; | } | }; | | void f() | { | range r {}; | | for (auto i : r) | { | [[maybe_unused]] auto v = i; | } | } | | } | | namespace test_lambda_capture_asterisk_this_by_value | { | | struct t | { | int i; | int foo() | { | return [*this]() | { | return i; | }(); | } | }; | | } | | namespace test_enum_class_construction | { | | enum class byte : unsigned char | {}; | | byte foo {42}; | | } | | namespace test_constexpr_if | { | | template | int f () | { | if constexpr(cond) | { | return 13; | } | else | { | return 42; | } | } | | } | | namespace test_selection_statement_with_initializer | { | | int f() | { | return 13; | } | | int f2() | { | if (auto i = f(); i > 0) | { | return 3; | } | | switch (auto i = f(); i + 4) | { | case 17: | return 2; | | default: | return 1; | } | } | | } | | namespace test_template_argument_deduction_for_class_templates | { | | template | struct pair | { | pair (T1 p1, T2 p2) | : m1 {p1}, | m2 {p2} | {} | | T1 m1; | T2 m2; | }; | | void f() | { | [[maybe_unused]] auto p = pair{13, 42u}; | } | | } | | namespace test_non_type_auto_template_parameters | { | | template | struct B | {}; | | B<5> b1; | B<'a'> b2; | | } | | namespace test_structured_bindings | { | | int arr[2] = { 1, 2 }; | std::pair pr = { 1, 2 }; | | auto f1() -> int(&)[2] | { | return arr; | } | | auto f2() -> std::pair& | { | return pr; | } | | struct S | { | int x1 : 2; | volatile double y1; | }; | | S f3() | { | return {}; | } | | auto [ x1, y1 ] = f1(); | auto& [ xr1, yr1 ] = f1(); | auto [ x2, y2 ] = f2(); | auto& [ xr2, yr2 ] = f2(); | const auto [ x3, y3 ] = f3(); | | } | | namespace test_exception_spec_type_system | { | | struct Good {}; | struct Bad {}; | | void g1() noexcept; | void g2(); | | template | Bad | f(T*, T*); | | template | Good | f(T1*, T2*); | | static_assert (std::is_same_v); | | } | | namespace test_inline_variables | { | | template void f(T) | {} | | template inline T g(T) | { | return T{}; | } | | template<> inline void f<>(int) | {} | | template<> int g<>(int) | { | return 5; | } | | } | | } // namespace cxx17 | | #endif // __cplusplus < 201703L | | | configure:6028: result: no configure:5225: checking whether /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ supports C++17 features with -std=c++1z configure:6019: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=c++1z -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 arm-none-linux-gnueabi-g++: error: unrecognized command line option '-std=c++1z' configure:6019: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | /* end confdefs.h. */ | | | // If the compiler admits that it is not ready for C++11, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201103L | | #error "This is not a C++11 compiler" | | #else | | namespace cxx11 | { | | namespace test_static_assert | { | | template | struct check | { | static_assert(sizeof(int) <= sizeof(T), "not big enough"); | }; | | } | | namespace test_final_override | { | | struct Base | { | virtual void f() {} | }; | | struct Derived : public Base | { | virtual void f() override {} | }; | | } | | namespace test_double_right_angle_brackets | { | | template < typename T > | struct check {}; | | typedef check single_type; | typedef check> double_type; | typedef check>> triple_type; | typedef check>>> quadruple_type; | | } | | namespace test_decltype | { | | int | f() | { | int a = 1; | decltype(a) b = 2; | return a + b; | } | | } | | namespace test_type_deduction | { | | template < typename T1, typename T2 > | struct is_same | { | static const bool value = false; | }; | | template < typename T > | struct is_same | { | static const bool value = true; | }; | | template < typename T1, typename T2 > | auto | add(T1 a1, T2 a2) -> decltype(a1 + a2) | { | return a1 + a2; | } | | int | test(const int c, volatile int v) | { | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == false, ""); | auto ac = c; | auto av = v; | auto sumi = ac + av + 'x'; | auto sumf = ac + av + 1.0; | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == true, ""); | return (sumf > 0.0) ? sumi : add(c, v); | } | | } | | namespace test_noexcept | { | | int f() { return 0; } | int g() noexcept { return 0; } | | static_assert(noexcept(f()) == false, ""); | static_assert(noexcept(g()) == true, ""); | | } | | namespace test_constexpr | { | | template < typename CharT > | unsigned long constexpr | strlen_c_r(const CharT *const s, const unsigned long acc) noexcept | { | return *s ? strlen_c_r(s + 1, acc + 1) : acc; | } | | template < typename CharT > | unsigned long constexpr | strlen_c(const CharT *const s) noexcept | { | return strlen_c_r(s, 0UL); | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("1") == 1UL, ""); | static_assert(strlen_c("example") == 7UL, ""); | static_assert(strlen_c("another\0example") == 7UL, ""); | | } | | namespace test_rvalue_references | { | | template < int N > | struct answer | { | static constexpr int value = N; | }; | | answer<1> f(int&) { return answer<1>(); } | answer<2> f(const int&) { return answer<2>(); } | answer<3> f(int&&) { return answer<3>(); } | | void | test() | { | int i = 0; | const int c = 0; | static_assert(decltype(f(i))::value == 1, ""); | static_assert(decltype(f(c))::value == 2, ""); | static_assert(decltype(f(0))::value == 3, ""); | } | | } | | namespace test_uniform_initialization | { | | struct test | { | static const int zero {}; | static const int one {1}; | }; | | static_assert(test::zero == 0, ""); | static_assert(test::one == 1, ""); | | } | | namespace test_lambdas | { | | void | test1() | { | auto lambda1 = [](){}; | auto lambda2 = lambda1; | lambda1(); | lambda2(); | } | | int | test2() | { | auto a = [](int i, int j){ return i + j; }(1, 2); | auto b = []() -> int { return '0'; }(); | auto c = [=](){ return a + b; }(); | auto d = [&](){ return c; }(); | auto e = [a, &b](int x) mutable { | const auto identity = [](int y){ return y; }; | for (auto i = 0; i < a; ++i) | a += b--; | return x + identity(a + b); | }(0); | return a + b + c + d + e; | } | | int | test3() | { | const auto nullary = [](){ return 0; }; | const auto unary = [](int x){ return x; }; | using nullary_t = decltype(nullary); | using unary_t = decltype(unary); | const auto higher1st = [](nullary_t f){ return f(); }; | const auto higher2nd = [unary](nullary_t f1){ | return [unary, f1](unary_t f2){ return f2(unary(f1())); }; | }; | return higher1st(nullary) + higher2nd(nullary)(unary); | } | | } | | namespace test_variadic_templates | { | | template | struct sum; | | template | struct sum | { | static constexpr auto value = N0 + sum::value; | }; | | template <> | struct sum<> | { | static constexpr auto value = 0; | }; | | static_assert(sum<>::value == 0, ""); | static_assert(sum<1>::value == 1, ""); | static_assert(sum<23>::value == 23, ""); | static_assert(sum<1, 2>::value == 3, ""); | static_assert(sum<5, 5, 11>::value == 21, ""); | static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); | | } | | // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae | // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function | // because of this. | namespace test_template_alias_sfinae | { | | struct foo {}; | | template | using member = typename T::member_type; | | template | void func(...) {} | | template | void func(member*) {} | | void test(); | | void test() { func(0); } | | } | | } // namespace cxx11 | | #endif // __cplusplus >= 201103L | | | | | // If the compiler admits that it is not ready for C++14, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201402L | | #error "This is not a C++14 compiler" | | #else | | namespace cxx14 | { | | namespace test_polymorphic_lambdas | { | | int | test() | { | const auto lambda = [](auto&&... args){ | const auto istiny = [](auto x){ | return (sizeof(x) == 1UL) ? 1 : 0; | }; | const int aretiny[] = { istiny(args)... }; | return aretiny[0]; | }; | return lambda(1, 1L, 1.0f, '1'); | } | | } | | namespace test_binary_literals | { | | constexpr auto ivii = 0b0000000000101010; | static_assert(ivii == 42, "wrong value"); | | } | | namespace test_generalized_constexpr | { | | template < typename CharT > | constexpr unsigned long | strlen_c(const CharT *const s) noexcept | { | auto length = 0UL; | for (auto p = s; *p; ++p) | ++length; | return length; | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("x") == 1UL, ""); | static_assert(strlen_c("test") == 4UL, ""); | static_assert(strlen_c("another\0test") == 7UL, ""); | | } | | namespace test_lambda_init_capture | { | | int | test() | { | auto x = 0; | const auto lambda1 = [a = x](int b){ return a + b; }; | const auto lambda2 = [a = lambda1(x)](){ return a; }; | return lambda2(); | } | | } | | namespace test_digit_separators | { | | constexpr auto ten_million = 100'000'000; | static_assert(ten_million == 100000000, ""); | | } | | namespace test_return_type_deduction | { | | auto f(int& x) { return x; } | decltype(auto) g(int& x) { return x; } | | template < typename T1, typename T2 > | struct is_same | { | static constexpr auto value = false; | }; | | template < typename T > | struct is_same | { | static constexpr auto value = true; | }; | | int | test() | { | auto x = 0; | static_assert(is_same::value, ""); | static_assert(is_same::value, ""); | return x; | } | | } | | } // namespace cxx14 | | #endif // __cplusplus >= 201402L | | | | | // If the compiler admits that it is not ready for C++17, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201703L | | #error "This is not a C++17 compiler" | | #else | | #include | #include | #include | | namespace cxx17 | { | | namespace test_constexpr_lambdas | { | | constexpr int foo = [](){return 42;}(); | | } | | namespace test::nested_namespace::definitions | { | | } | | namespace test_fold_expression | { | | template | int multiply(Args... args) | { | return (args * ... * 1); | } | | template | bool all(Args... args) | { | return (args && ...); | } | | } | | namespace test_extended_static_assert | { | | static_assert (true); | | } | | namespace test_auto_brace_init_list | { | | auto foo = {5}; | auto bar {5}; | | static_assert(std::is_same, decltype(foo)>::value); | static_assert(std::is_same::value); | } | | namespace test_typename_in_template_template_parameter | { | | template typename X> struct D; | | } | | namespace test_fallthrough_nodiscard_maybe_unused_attributes | { | | int f1() | { | return 42; | } | | [[nodiscard]] int f2() | { | [[maybe_unused]] auto unused = f1(); | | switch (f1()) | { | case 17: | f1(); | [[fallthrough]]; | case 42: | f1(); | } | return f1(); | } | | } | | namespace test_extended_aggregate_initialization | { | | struct base1 | { | int b1, b2 = 42; | }; | | struct base2 | { | base2() { | b3 = 42; | } | int b3; | }; | | struct derived : base1, base2 | { | int d; | }; | | derived d1 {{1, 2}, {}, 4}; // full initialization | derived d2 {{}, {}, 4}; // value-initialized bases | | } | | namespace test_general_range_based_for_loop | { | | struct iter | { | int i; | | int& operator* () | { | return i; | } | | const int& operator* () const | { | return i; | } | | iter& operator++() | { | ++i; | return *this; | } | }; | | struct sentinel | { | int i; | }; | | bool operator== (const iter& i, const sentinel& s) | { | return i.i == s.i; | } | | bool operator!= (const iter& i, const sentinel& s) | { | return !(i == s); | } | | struct range | { | iter begin() const | { | return {0}; | } | | sentinel end() const | { | return {5}; | } | }; | | void f() | { | range r {}; | | for (auto i : r) | { | [[maybe_unused]] auto v = i; | } | } | | } | | namespace test_lambda_capture_asterisk_this_by_value | { | | struct t | { | int i; | int foo() | { | return [*this]() | { | return i; | }(); | } | }; | | } | | namespace test_enum_class_construction | { | | enum class byte : unsigned char | {}; | | byte foo {42}; | | } | | namespace test_constexpr_if | { | | template | int f () | { | if constexpr(cond) | { | return 13; | } | else | { | return 42; | } | } | | } | | namespace test_selection_statement_with_initializer | { | | int f() | { | return 13; | } | | int f2() | { | if (auto i = f(); i > 0) | { | return 3; | } | | switch (auto i = f(); i + 4) | { | case 17: | return 2; | | default: | return 1; | } | } | | } | | namespace test_template_argument_deduction_for_class_templates | { | | template | struct pair | { | pair (T1 p1, T2 p2) | : m1 {p1}, | m2 {p2} | {} | | T1 m1; | T2 m2; | }; | | void f() | { | [[maybe_unused]] auto p = pair{13, 42u}; | } | | } | | namespace test_non_type_auto_template_parameters | { | | template | struct B | {}; | | B<5> b1; | B<'a'> b2; | | } | | namespace test_structured_bindings | { | | int arr[2] = { 1, 2 }; | std::pair pr = { 1, 2 }; | | auto f1() -> int(&)[2] | { | return arr; | } | | auto f2() -> std::pair& | { | return pr; | } | | struct S | { | int x1 : 2; | volatile double y1; | }; | | S f3() | { | return {}; | } | | auto [ x1, y1 ] = f1(); | auto& [ xr1, yr1 ] = f1(); | auto [ x2, y2 ] = f2(); | auto& [ xr2, yr2 ] = f2(); | const auto [ x3, y3 ] = f3(); | | } | | namespace test_exception_spec_type_system | { | | struct Good {}; | struct Bad {}; | | void g1() noexcept; | void g2(); | | template | Bad | f(T*, T*); | | template | Good | f(T1*, T2*); | | static_assert (std::is_same_v); | | } | | namespace test_inline_variables | { | | template void f(T) | {} | | template inline T g(T) | { | return T{}; | } | | template<> inline void f<>(int) | {} | | template<> int g<>(int) | { | return 5; | } | | } | | } // namespace cxx17 | | #endif // __cplusplus < 201703L | | | configure:6028: result: no configure:5225: checking whether /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ supports C++17 features with +std=c++1z configure:6019: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ +std=c++1z -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 arm-none-linux-gnueabi-g++: error: +std=c++1z: No such file or directory configure:6019: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | /* end confdefs.h. */ | | | // If the compiler admits that it is not ready for C++11, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201103L | | #error "This is not a C++11 compiler" | | #else | | namespace cxx11 | { | | namespace test_static_assert | { | | template | struct check | { | static_assert(sizeof(int) <= sizeof(T), "not big enough"); | }; | | } | | namespace test_final_override | { | | struct Base | { | virtual void f() {} | }; | | struct Derived : public Base | { | virtual void f() override {} | }; | | } | | namespace test_double_right_angle_brackets | { | | template < typename T > | struct check {}; | | typedef check single_type; | typedef check> double_type; | typedef check>> triple_type; | typedef check>>> quadruple_type; | | } | | namespace test_decltype | { | | int | f() | { | int a = 1; | decltype(a) b = 2; | return a + b; | } | | } | | namespace test_type_deduction | { | | template < typename T1, typename T2 > | struct is_same | { | static const bool value = false; | }; | | template < typename T > | struct is_same | { | static const bool value = true; | }; | | template < typename T1, typename T2 > | auto | add(T1 a1, T2 a2) -> decltype(a1 + a2) | { | return a1 + a2; | } | | int | test(const int c, volatile int v) | { | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == false, ""); | auto ac = c; | auto av = v; | auto sumi = ac + av + 'x'; | auto sumf = ac + av + 1.0; | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == true, ""); | return (sumf > 0.0) ? sumi : add(c, v); | } | | } | | namespace test_noexcept | { | | int f() { return 0; } | int g() noexcept { return 0; } | | static_assert(noexcept(f()) == false, ""); | static_assert(noexcept(g()) == true, ""); | | } | | namespace test_constexpr | { | | template < typename CharT > | unsigned long constexpr | strlen_c_r(const CharT *const s, const unsigned long acc) noexcept | { | return *s ? strlen_c_r(s + 1, acc + 1) : acc; | } | | template < typename CharT > | unsigned long constexpr | strlen_c(const CharT *const s) noexcept | { | return strlen_c_r(s, 0UL); | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("1") == 1UL, ""); | static_assert(strlen_c("example") == 7UL, ""); | static_assert(strlen_c("another\0example") == 7UL, ""); | | } | | namespace test_rvalue_references | { | | template < int N > | struct answer | { | static constexpr int value = N; | }; | | answer<1> f(int&) { return answer<1>(); } | answer<2> f(const int&) { return answer<2>(); } | answer<3> f(int&&) { return answer<3>(); } | | void | test() | { | int i = 0; | const int c = 0; | static_assert(decltype(f(i))::value == 1, ""); | static_assert(decltype(f(c))::value == 2, ""); | static_assert(decltype(f(0))::value == 3, ""); | } | | } | | namespace test_uniform_initialization | { | | struct test | { | static const int zero {}; | static const int one {1}; | }; | | static_assert(test::zero == 0, ""); | static_assert(test::one == 1, ""); | | } | | namespace test_lambdas | { | | void | test1() | { | auto lambda1 = [](){}; | auto lambda2 = lambda1; | lambda1(); | lambda2(); | } | | int | test2() | { | auto a = [](int i, int j){ return i + j; }(1, 2); | auto b = []() -> int { return '0'; }(); | auto c = [=](){ return a + b; }(); | auto d = [&](){ return c; }(); | auto e = [a, &b](int x) mutable { | const auto identity = [](int y){ return y; }; | for (auto i = 0; i < a; ++i) | a += b--; | return x + identity(a + b); | }(0); | return a + b + c + d + e; | } | | int | test3() | { | const auto nullary = [](){ return 0; }; | const auto unary = [](int x){ return x; }; | using nullary_t = decltype(nullary); | using unary_t = decltype(unary); | const auto higher1st = [](nullary_t f){ return f(); }; | const auto higher2nd = [unary](nullary_t f1){ | return [unary, f1](unary_t f2){ return f2(unary(f1())); }; | }; | return higher1st(nullary) + higher2nd(nullary)(unary); | } | | } | | namespace test_variadic_templates | { | | template | struct sum; | | template | struct sum | { | static constexpr auto value = N0 + sum::value; | }; | | template <> | struct sum<> | { | static constexpr auto value = 0; | }; | | static_assert(sum<>::value == 0, ""); | static_assert(sum<1>::value == 1, ""); | static_assert(sum<23>::value == 23, ""); | static_assert(sum<1, 2>::value == 3, ""); | static_assert(sum<5, 5, 11>::value == 21, ""); | static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); | | } | | // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae | // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function | // because of this. | namespace test_template_alias_sfinae | { | | struct foo {}; | | template | using member = typename T::member_type; | | template | void func(...) {} | | template | void func(member*) {} | | void test(); | | void test() { func(0); } | | } | | } // namespace cxx11 | | #endif // __cplusplus >= 201103L | | | | | // If the compiler admits that it is not ready for C++14, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201402L | | #error "This is not a C++14 compiler" | | #else | | namespace cxx14 | { | | namespace test_polymorphic_lambdas | { | | int | test() | { | const auto lambda = [](auto&&... args){ | const auto istiny = [](auto x){ | return (sizeof(x) == 1UL) ? 1 : 0; | }; | const int aretiny[] = { istiny(args)... }; | return aretiny[0]; | }; | return lambda(1, 1L, 1.0f, '1'); | } | | } | | namespace test_binary_literals | { | | constexpr auto ivii = 0b0000000000101010; | static_assert(ivii == 42, "wrong value"); | | } | | namespace test_generalized_constexpr | { | | template < typename CharT > | constexpr unsigned long | strlen_c(const CharT *const s) noexcept | { | auto length = 0UL; | for (auto p = s; *p; ++p) | ++length; | return length; | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("x") == 1UL, ""); | static_assert(strlen_c("test") == 4UL, ""); | static_assert(strlen_c("another\0test") == 7UL, ""); | | } | | namespace test_lambda_init_capture | { | | int | test() | { | auto x = 0; | const auto lambda1 = [a = x](int b){ return a + b; }; | const auto lambda2 = [a = lambda1(x)](){ return a; }; | return lambda2(); | } | | } | | namespace test_digit_separators | { | | constexpr auto ten_million = 100'000'000; | static_assert(ten_million == 100000000, ""); | | } | | namespace test_return_type_deduction | { | | auto f(int& x) { return x; } | decltype(auto) g(int& x) { return x; } | | template < typename T1, typename T2 > | struct is_same | { | static constexpr auto value = false; | }; | | template < typename T > | struct is_same | { | static constexpr auto value = true; | }; | | int | test() | { | auto x = 0; | static_assert(is_same::value, ""); | static_assert(is_same::value, ""); | return x; | } | | } | | } // namespace cxx14 | | #endif // __cplusplus >= 201402L | | | | | // If the compiler admits that it is not ready for C++17, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201703L | | #error "This is not a C++17 compiler" | | #else | | #include | #include | #include | | namespace cxx17 | { | | namespace test_constexpr_lambdas | { | | constexpr int foo = [](){return 42;}(); | | } | | namespace test::nested_namespace::definitions | { | | } | | namespace test_fold_expression | { | | template | int multiply(Args... args) | { | return (args * ... * 1); | } | | template | bool all(Args... args) | { | return (args && ...); | } | | } | | namespace test_extended_static_assert | { | | static_assert (true); | | } | | namespace test_auto_brace_init_list | { | | auto foo = {5}; | auto bar {5}; | | static_assert(std::is_same, decltype(foo)>::value); | static_assert(std::is_same::value); | } | | namespace test_typename_in_template_template_parameter | { | | template typename X> struct D; | | } | | namespace test_fallthrough_nodiscard_maybe_unused_attributes | { | | int f1() | { | return 42; | } | | [[nodiscard]] int f2() | { | [[maybe_unused]] auto unused = f1(); | | switch (f1()) | { | case 17: | f1(); | [[fallthrough]]; | case 42: | f1(); | } | return f1(); | } | | } | | namespace test_extended_aggregate_initialization | { | | struct base1 | { | int b1, b2 = 42; | }; | | struct base2 | { | base2() { | b3 = 42; | } | int b3; | }; | | struct derived : base1, base2 | { | int d; | }; | | derived d1 {{1, 2}, {}, 4}; // full initialization | derived d2 {{}, {}, 4}; // value-initialized bases | | } | | namespace test_general_range_based_for_loop | { | | struct iter | { | int i; | | int& operator* () | { | return i; | } | | const int& operator* () const | { | return i; | } | | iter& operator++() | { | ++i; | return *this; | } | }; | | struct sentinel | { | int i; | }; | | bool operator== (const iter& i, const sentinel& s) | { | return i.i == s.i; | } | | bool operator!= (const iter& i, const sentinel& s) | { | return !(i == s); | } | | struct range | { | iter begin() const | { | return {0}; | } | | sentinel end() const | { | return {5}; | } | }; | | void f() | { | range r {}; | | for (auto i : r) | { | [[maybe_unused]] auto v = i; | } | } | | } | | namespace test_lambda_capture_asterisk_this_by_value | { | | struct t | { | int i; | int foo() | { | return [*this]() | { | return i; | }(); | } | }; | | } | | namespace test_enum_class_construction | { | | enum class byte : unsigned char | {}; | | byte foo {42}; | | } | | namespace test_constexpr_if | { | | template | int f () | { | if constexpr(cond) | { | return 13; | } | else | { | return 42; | } | } | | } | | namespace test_selection_statement_with_initializer | { | | int f() | { | return 13; | } | | int f2() | { | if (auto i = f(); i > 0) | { | return 3; | } | | switch (auto i = f(); i + 4) | { | case 17: | return 2; | | default: | return 1; | } | } | | } | | namespace test_template_argument_deduction_for_class_templates | { | | template | struct pair | { | pair (T1 p1, T2 p2) | : m1 {p1}, | m2 {p2} | {} | | T1 m1; | T2 m2; | }; | | void f() | { | [[maybe_unused]] auto p = pair{13, 42u}; | } | | } | | namespace test_non_type_auto_template_parameters | { | | template | struct B | {}; | | B<5> b1; | B<'a'> b2; | | } | | namespace test_structured_bindings | { | | int arr[2] = { 1, 2 }; | std::pair pr = { 1, 2 }; | | auto f1() -> int(&)[2] | { | return arr; | } | | auto f2() -> std::pair& | { | return pr; | } | | struct S | { | int x1 : 2; | volatile double y1; | }; | | S f3() | { | return {}; | } | | auto [ x1, y1 ] = f1(); | auto& [ xr1, yr1 ] = f1(); | auto [ x2, y2 ] = f2(); | auto& [ xr2, yr2 ] = f2(); | const auto [ x3, y3 ] = f3(); | | } | | namespace test_exception_spec_type_system | { | | struct Good {}; | struct Bad {}; | | void g1() noexcept; | void g2(); | | template | Bad | f(T*, T*); | | template | Good | f(T1*, T2*); | | static_assert (std::is_same_v); | | } | | namespace test_inline_variables | { | | template void f(T) | {} | | template inline T g(T) | { | return T{}; | } | | template<> inline void f<>(int) | {} | | template<> int g<>(int) | { | return 5; | } | | } | | } // namespace cxx17 | | #endif // __cplusplus < 201703L | | | configure:6028: result: no configure:5225: checking whether /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ supports C++17 features with -h std=c++1z configure:6019: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -h std=c++1z -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 conftest.cpp:24:2: error: #error "This is not a C++11 compiler" #error "This is not a C++11 compiler" ^ conftest.cpp:309:2: error: #error "This is not a C++14 compiler" #error "This is not a C++14 compiler" ^ conftest.cpp:429:2: error: #error "This is not a C++17 compiler" #error "This is not a C++17 compiler" ^ configure:6019: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | /* end confdefs.h. */ | | | // If the compiler admits that it is not ready for C++11, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201103L | | #error "This is not a C++11 compiler" | | #else | | namespace cxx11 | { | | namespace test_static_assert | { | | template | struct check | { | static_assert(sizeof(int) <= sizeof(T), "not big enough"); | }; | | } | | namespace test_final_override | { | | struct Base | { | virtual void f() {} | }; | | struct Derived : public Base | { | virtual void f() override {} | }; | | } | | namespace test_double_right_angle_brackets | { | | template < typename T > | struct check {}; | | typedef check single_type; | typedef check> double_type; | typedef check>> triple_type; | typedef check>>> quadruple_type; | | } | | namespace test_decltype | { | | int | f() | { | int a = 1; | decltype(a) b = 2; | return a + b; | } | | } | | namespace test_type_deduction | { | | template < typename T1, typename T2 > | struct is_same | { | static const bool value = false; | }; | | template < typename T > | struct is_same | { | static const bool value = true; | }; | | template < typename T1, typename T2 > | auto | add(T1 a1, T2 a2) -> decltype(a1 + a2) | { | return a1 + a2; | } | | int | test(const int c, volatile int v) | { | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == false, ""); | auto ac = c; | auto av = v; | auto sumi = ac + av + 'x'; | auto sumf = ac + av + 1.0; | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == true, ""); | return (sumf > 0.0) ? sumi : add(c, v); | } | | } | | namespace test_noexcept | { | | int f() { return 0; } | int g() noexcept { return 0; } | | static_assert(noexcept(f()) == false, ""); | static_assert(noexcept(g()) == true, ""); | | } | | namespace test_constexpr | { | | template < typename CharT > | unsigned long constexpr | strlen_c_r(const CharT *const s, const unsigned long acc) noexcept | { | return *s ? strlen_c_r(s + 1, acc + 1) : acc; | } | | template < typename CharT > | unsigned long constexpr | strlen_c(const CharT *const s) noexcept | { | return strlen_c_r(s, 0UL); | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("1") == 1UL, ""); | static_assert(strlen_c("example") == 7UL, ""); | static_assert(strlen_c("another\0example") == 7UL, ""); | | } | | namespace test_rvalue_references | { | | template < int N > | struct answer | { | static constexpr int value = N; | }; | | answer<1> f(int&) { return answer<1>(); } | answer<2> f(const int&) { return answer<2>(); } | answer<3> f(int&&) { return answer<3>(); } | | void | test() | { | int i = 0; | const int c = 0; | static_assert(decltype(f(i))::value == 1, ""); | static_assert(decltype(f(c))::value == 2, ""); | static_assert(decltype(f(0))::value == 3, ""); | } | | } | | namespace test_uniform_initialization | { | | struct test | { | static const int zero {}; | static const int one {1}; | }; | | static_assert(test::zero == 0, ""); | static_assert(test::one == 1, ""); | | } | | namespace test_lambdas | { | | void | test1() | { | auto lambda1 = [](){}; | auto lambda2 = lambda1; | lambda1(); | lambda2(); | } | | int | test2() | { | auto a = [](int i, int j){ return i + j; }(1, 2); | auto b = []() -> int { return '0'; }(); | auto c = [=](){ return a + b; }(); | auto d = [&](){ return c; }(); | auto e = [a, &b](int x) mutable { | const auto identity = [](int y){ return y; }; | for (auto i = 0; i < a; ++i) | a += b--; | return x + identity(a + b); | }(0); | return a + b + c + d + e; | } | | int | test3() | { | const auto nullary = [](){ return 0; }; | const auto unary = [](int x){ return x; }; | using nullary_t = decltype(nullary); | using unary_t = decltype(unary); | const auto higher1st = [](nullary_t f){ return f(); }; | const auto higher2nd = [unary](nullary_t f1){ | return [unary, f1](unary_t f2){ return f2(unary(f1())); }; | }; | return higher1st(nullary) + higher2nd(nullary)(unary); | } | | } | | namespace test_variadic_templates | { | | template | struct sum; | | template | struct sum | { | static constexpr auto value = N0 + sum::value; | }; | | template <> | struct sum<> | { | static constexpr auto value = 0; | }; | | static_assert(sum<>::value == 0, ""); | static_assert(sum<1>::value == 1, ""); | static_assert(sum<23>::value == 23, ""); | static_assert(sum<1, 2>::value == 3, ""); | static_assert(sum<5, 5, 11>::value == 21, ""); | static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); | | } | | // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae | // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function | // because of this. | namespace test_template_alias_sfinae | { | | struct foo {}; | | template | using member = typename T::member_type; | | template | void func(...) {} | | template | void func(member*) {} | | void test(); | | void test() { func(0); } | | } | | } // namespace cxx11 | | #endif // __cplusplus >= 201103L | | | | | // If the compiler admits that it is not ready for C++14, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201402L | | #error "This is not a C++14 compiler" | | #else | | namespace cxx14 | { | | namespace test_polymorphic_lambdas | { | | int | test() | { | const auto lambda = [](auto&&... args){ | const auto istiny = [](auto x){ | return (sizeof(x) == 1UL) ? 1 : 0; | }; | const int aretiny[] = { istiny(args)... }; | return aretiny[0]; | }; | return lambda(1, 1L, 1.0f, '1'); | } | | } | | namespace test_binary_literals | { | | constexpr auto ivii = 0b0000000000101010; | static_assert(ivii == 42, "wrong value"); | | } | | namespace test_generalized_constexpr | { | | template < typename CharT > | constexpr unsigned long | strlen_c(const CharT *const s) noexcept | { | auto length = 0UL; | for (auto p = s; *p; ++p) | ++length; | return length; | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("x") == 1UL, ""); | static_assert(strlen_c("test") == 4UL, ""); | static_assert(strlen_c("another\0test") == 7UL, ""); | | } | | namespace test_lambda_init_capture | { | | int | test() | { | auto x = 0; | const auto lambda1 = [a = x](int b){ return a + b; }; | const auto lambda2 = [a = lambda1(x)](){ return a; }; | return lambda2(); | } | | } | | namespace test_digit_separators | { | | constexpr auto ten_million = 100'000'000; | static_assert(ten_million == 100000000, ""); | | } | | namespace test_return_type_deduction | { | | auto f(int& x) { return x; } | decltype(auto) g(int& x) { return x; } | | template < typename T1, typename T2 > | struct is_same | { | static constexpr auto value = false; | }; | | template < typename T > | struct is_same | { | static constexpr auto value = true; | }; | | int | test() | { | auto x = 0; | static_assert(is_same::value, ""); | static_assert(is_same::value, ""); | return x; | } | | } | | } // namespace cxx14 | | #endif // __cplusplus >= 201402L | | | | | // If the compiler admits that it is not ready for C++17, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201703L | | #error "This is not a C++17 compiler" | | #else | | #include | #include | #include | | namespace cxx17 | { | | namespace test_constexpr_lambdas | { | | constexpr int foo = [](){return 42;}(); | | } | | namespace test::nested_namespace::definitions | { | | } | | namespace test_fold_expression | { | | template | int multiply(Args... args) | { | return (args * ... * 1); | } | | template | bool all(Args... args) | { | return (args && ...); | } | | } | | namespace test_extended_static_assert | { | | static_assert (true); | | } | | namespace test_auto_brace_init_list | { | | auto foo = {5}; | auto bar {5}; | | static_assert(std::is_same, decltype(foo)>::value); | static_assert(std::is_same::value); | } | | namespace test_typename_in_template_template_parameter | { | | template typename X> struct D; | | } | | namespace test_fallthrough_nodiscard_maybe_unused_attributes | { | | int f1() | { | return 42; | } | | [[nodiscard]] int f2() | { | [[maybe_unused]] auto unused = f1(); | | switch (f1()) | { | case 17: | f1(); | [[fallthrough]]; | case 42: | f1(); | } | return f1(); | } | | } | | namespace test_extended_aggregate_initialization | { | | struct base1 | { | int b1, b2 = 42; | }; | | struct base2 | { | base2() { | b3 = 42; | } | int b3; | }; | | struct derived : base1, base2 | { | int d; | }; | | derived d1 {{1, 2}, {}, 4}; // full initialization | derived d2 {{}, {}, 4}; // value-initialized bases | | } | | namespace test_general_range_based_for_loop | { | | struct iter | { | int i; | | int& operator* () | { | return i; | } | | const int& operator* () const | { | return i; | } | | iter& operator++() | { | ++i; | return *this; | } | }; | | struct sentinel | { | int i; | }; | | bool operator== (const iter& i, const sentinel& s) | { | return i.i == s.i; | } | | bool operator!= (const iter& i, const sentinel& s) | { | return !(i == s); | } | | struct range | { | iter begin() const | { | return {0}; | } | | sentinel end() const | { | return {5}; | } | }; | | void f() | { | range r {}; | | for (auto i : r) | { | [[maybe_unused]] auto v = i; | } | } | | } | | namespace test_lambda_capture_asterisk_this_by_value | { | | struct t | { | int i; | int foo() | { | return [*this]() | { | return i; | }(); | } | }; | | } | | namespace test_enum_class_construction | { | | enum class byte : unsigned char | {}; | | byte foo {42}; | | } | | namespace test_constexpr_if | { | | template | int f () | { | if constexpr(cond) | { | return 13; | } | else | { | return 42; | } | } | | } | | namespace test_selection_statement_with_initializer | { | | int f() | { | return 13; | } | | int f2() | { | if (auto i = f(); i > 0) | { | return 3; | } | | switch (auto i = f(); i + 4) | { | case 17: | return 2; | | default: | return 1; | } | } | | } | | namespace test_template_argument_deduction_for_class_templates | { | | template | struct pair | { | pair (T1 p1, T2 p2) | : m1 {p1}, | m2 {p2} | {} | | T1 m1; | T2 m2; | }; | | void f() | { | [[maybe_unused]] auto p = pair{13, 42u}; | } | | } | | namespace test_non_type_auto_template_parameters | { | | template | struct B | {}; | | B<5> b1; | B<'a'> b2; | | } | | namespace test_structured_bindings | { | | int arr[2] = { 1, 2 }; | std::pair pr = { 1, 2 }; | | auto f1() -> int(&)[2] | { | return arr; | } | | auto f2() -> std::pair& | { | return pr; | } | | struct S | { | int x1 : 2; | volatile double y1; | }; | | S f3() | { | return {}; | } | | auto [ x1, y1 ] = f1(); | auto& [ xr1, yr1 ] = f1(); | auto [ x2, y2 ] = f2(); | auto& [ xr2, yr2 ] = f2(); | const auto [ x3, y3 ] = f3(); | | } | | namespace test_exception_spec_type_system | { | | struct Good {}; | struct Bad {}; | | void g1() noexcept; | void g2(); | | template | Bad | f(T*, T*); | | template | Good | f(T1*, T2*); | | static_assert (std::is_same_v); | | } | | namespace test_inline_variables | { | | template void f(T) | {} | | template inline T g(T) | { | return T{}; | } | | template<> inline void f<>(int) | {} | | template<> int g<>(int) | { | return 5; | } | | } | | } // namespace cxx17 | | #endif // __cplusplus < 201703L | | | configure:6028: result: no configure:6057: No compiler with C++17 support was found configure:6085: checking whether /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ supports C++14 features with -std=gnu++14 configure:6501: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++14 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 arm-none-linux-gnueabi-g++: error: unrecognized command line option '-std=gnu++14' configure:6501: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | /* end confdefs.h. */ | | | // If the compiler admits that it is not ready for C++11, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201103L | | #error "This is not a C++11 compiler" | | #else | | namespace cxx11 | { | | namespace test_static_assert | { | | template | struct check | { | static_assert(sizeof(int) <= sizeof(T), "not big enough"); | }; | | } | | namespace test_final_override | { | | struct Base | { | virtual void f() {} | }; | | struct Derived : public Base | { | virtual void f() override {} | }; | | } | | namespace test_double_right_angle_brackets | { | | template < typename T > | struct check {}; | | typedef check single_type; | typedef check> double_type; | typedef check>> triple_type; | typedef check>>> quadruple_type; | | } | | namespace test_decltype | { | | int | f() | { | int a = 1; | decltype(a) b = 2; | return a + b; | } | | } | | namespace test_type_deduction | { | | template < typename T1, typename T2 > | struct is_same | { | static const bool value = false; | }; | | template < typename T > | struct is_same | { | static const bool value = true; | }; | | template < typename T1, typename T2 > | auto | add(T1 a1, T2 a2) -> decltype(a1 + a2) | { | return a1 + a2; | } | | int | test(const int c, volatile int v) | { | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == false, ""); | auto ac = c; | auto av = v; | auto sumi = ac + av + 'x'; | auto sumf = ac + av + 1.0; | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == true, ""); | return (sumf > 0.0) ? sumi : add(c, v); | } | | } | | namespace test_noexcept | { | | int f() { return 0; } | int g() noexcept { return 0; } | | static_assert(noexcept(f()) == false, ""); | static_assert(noexcept(g()) == true, ""); | | } | | namespace test_constexpr | { | | template < typename CharT > | unsigned long constexpr | strlen_c_r(const CharT *const s, const unsigned long acc) noexcept | { | return *s ? strlen_c_r(s + 1, acc + 1) : acc; | } | | template < typename CharT > | unsigned long constexpr | strlen_c(const CharT *const s) noexcept | { | return strlen_c_r(s, 0UL); | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("1") == 1UL, ""); | static_assert(strlen_c("example") == 7UL, ""); | static_assert(strlen_c("another\0example") == 7UL, ""); | | } | | namespace test_rvalue_references | { | | template < int N > | struct answer | { | static constexpr int value = N; | }; | | answer<1> f(int&) { return answer<1>(); } | answer<2> f(const int&) { return answer<2>(); } | answer<3> f(int&&) { return answer<3>(); } | | void | test() | { | int i = 0; | const int c = 0; | static_assert(decltype(f(i))::value == 1, ""); | static_assert(decltype(f(c))::value == 2, ""); | static_assert(decltype(f(0))::value == 3, ""); | } | | } | | namespace test_uniform_initialization | { | | struct test | { | static const int zero {}; | static const int one {1}; | }; | | static_assert(test::zero == 0, ""); | static_assert(test::one == 1, ""); | | } | | namespace test_lambdas | { | | void | test1() | { | auto lambda1 = [](){}; | auto lambda2 = lambda1; | lambda1(); | lambda2(); | } | | int | test2() | { | auto a = [](int i, int j){ return i + j; }(1, 2); | auto b = []() -> int { return '0'; }(); | auto c = [=](){ return a + b; }(); | auto d = [&](){ return c; }(); | auto e = [a, &b](int x) mutable { | const auto identity = [](int y){ return y; }; | for (auto i = 0; i < a; ++i) | a += b--; | return x + identity(a + b); | }(0); | return a + b + c + d + e; | } | | int | test3() | { | const auto nullary = [](){ return 0; }; | const auto unary = [](int x){ return x; }; | using nullary_t = decltype(nullary); | using unary_t = decltype(unary); | const auto higher1st = [](nullary_t f){ return f(); }; | const auto higher2nd = [unary](nullary_t f1){ | return [unary, f1](unary_t f2){ return f2(unary(f1())); }; | }; | return higher1st(nullary) + higher2nd(nullary)(unary); | } | | } | | namespace test_variadic_templates | { | | template | struct sum; | | template | struct sum | { | static constexpr auto value = N0 + sum::value; | }; | | template <> | struct sum<> | { | static constexpr auto value = 0; | }; | | static_assert(sum<>::value == 0, ""); | static_assert(sum<1>::value == 1, ""); | static_assert(sum<23>::value == 23, ""); | static_assert(sum<1, 2>::value == 3, ""); | static_assert(sum<5, 5, 11>::value == 21, ""); | static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); | | } | | // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae | // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function | // because of this. | namespace test_template_alias_sfinae | { | | struct foo {}; | | template | using member = typename T::member_type; | | template | void func(...) {} | | template | void func(member*) {} | | void test(); | | void test() { func(0); } | | } | | } // namespace cxx11 | | #endif // __cplusplus >= 201103L | | | | | // If the compiler admits that it is not ready for C++14, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201402L | | #error "This is not a C++14 compiler" | | #else | | namespace cxx14 | { | | namespace test_polymorphic_lambdas | { | | int | test() | { | const auto lambda = [](auto&&... args){ | const auto istiny = [](auto x){ | return (sizeof(x) == 1UL) ? 1 : 0; | }; | const int aretiny[] = { istiny(args)... }; | return aretiny[0]; | }; | return lambda(1, 1L, 1.0f, '1'); | } | | } | | namespace test_binary_literals | { | | constexpr auto ivii = 0b0000000000101010; | static_assert(ivii == 42, "wrong value"); | | } | | namespace test_generalized_constexpr | { | | template < typename CharT > | constexpr unsigned long | strlen_c(const CharT *const s) noexcept | { | auto length = 0UL; | for (auto p = s; *p; ++p) | ++length; | return length; | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("x") == 1UL, ""); | static_assert(strlen_c("test") == 4UL, ""); | static_assert(strlen_c("another\0test") == 7UL, ""); | | } | | namespace test_lambda_init_capture | { | | int | test() | { | auto x = 0; | const auto lambda1 = [a = x](int b){ return a + b; }; | const auto lambda2 = [a = lambda1(x)](){ return a; }; | return lambda2(); | } | | } | | namespace test_digit_separators | { | | constexpr auto ten_million = 100'000'000; | static_assert(ten_million == 100000000, ""); | | } | | namespace test_return_type_deduction | { | | auto f(int& x) { return x; } | decltype(auto) g(int& x) { return x; } | | template < typename T1, typename T2 > | struct is_same | { | static constexpr auto value = false; | }; | | template < typename T > | struct is_same | { | static constexpr auto value = true; | }; | | int | test() | { | auto x = 0; | static_assert(is_same::value, ""); | static_assert(is_same::value, ""); | return x; | } | | } | | } // namespace cxx14 | | #endif // __cplusplus >= 201402L | | | configure:6510: result: no configure:6085: checking whether /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ supports C++14 features with -std=gnu++1y configure:6501: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++1y -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 conftest.cpp:309:2: error: #error "This is not a C++14 compiler" #error "This is not a C++14 compiler" ^ configure:6501: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | /* end confdefs.h. */ | | | // If the compiler admits that it is not ready for C++11, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201103L | | #error "This is not a C++11 compiler" | | #else | | namespace cxx11 | { | | namespace test_static_assert | { | | template | struct check | { | static_assert(sizeof(int) <= sizeof(T), "not big enough"); | }; | | } | | namespace test_final_override | { | | struct Base | { | virtual void f() {} | }; | | struct Derived : public Base | { | virtual void f() override {} | }; | | } | | namespace test_double_right_angle_brackets | { | | template < typename T > | struct check {}; | | typedef check single_type; | typedef check> double_type; | typedef check>> triple_type; | typedef check>>> quadruple_type; | | } | | namespace test_decltype | { | | int | f() | { | int a = 1; | decltype(a) b = 2; | return a + b; | } | | } | | namespace test_type_deduction | { | | template < typename T1, typename T2 > | struct is_same | { | static const bool value = false; | }; | | template < typename T > | struct is_same | { | static const bool value = true; | }; | | template < typename T1, typename T2 > | auto | add(T1 a1, T2 a2) -> decltype(a1 + a2) | { | return a1 + a2; | } | | int | test(const int c, volatile int v) | { | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == false, ""); | auto ac = c; | auto av = v; | auto sumi = ac + av + 'x'; | auto sumf = ac + av + 1.0; | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == true, ""); | return (sumf > 0.0) ? sumi : add(c, v); | } | | } | | namespace test_noexcept | { | | int f() { return 0; } | int g() noexcept { return 0; } | | static_assert(noexcept(f()) == false, ""); | static_assert(noexcept(g()) == true, ""); | | } | | namespace test_constexpr | { | | template < typename CharT > | unsigned long constexpr | strlen_c_r(const CharT *const s, const unsigned long acc) noexcept | { | return *s ? strlen_c_r(s + 1, acc + 1) : acc; | } | | template < typename CharT > | unsigned long constexpr | strlen_c(const CharT *const s) noexcept | { | return strlen_c_r(s, 0UL); | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("1") == 1UL, ""); | static_assert(strlen_c("example") == 7UL, ""); | static_assert(strlen_c("another\0example") == 7UL, ""); | | } | | namespace test_rvalue_references | { | | template < int N > | struct answer | { | static constexpr int value = N; | }; | | answer<1> f(int&) { return answer<1>(); } | answer<2> f(const int&) { return answer<2>(); } | answer<3> f(int&&) { return answer<3>(); } | | void | test() | { | int i = 0; | const int c = 0; | static_assert(decltype(f(i))::value == 1, ""); | static_assert(decltype(f(c))::value == 2, ""); | static_assert(decltype(f(0))::value == 3, ""); | } | | } | | namespace test_uniform_initialization | { | | struct test | { | static const int zero {}; | static const int one {1}; | }; | | static_assert(test::zero == 0, ""); | static_assert(test::one == 1, ""); | | } | | namespace test_lambdas | { | | void | test1() | { | auto lambda1 = [](){}; | auto lambda2 = lambda1; | lambda1(); | lambda2(); | } | | int | test2() | { | auto a = [](int i, int j){ return i + j; }(1, 2); | auto b = []() -> int { return '0'; }(); | auto c = [=](){ return a + b; }(); | auto d = [&](){ return c; }(); | auto e = [a, &b](int x) mutable { | const auto identity = [](int y){ return y; }; | for (auto i = 0; i < a; ++i) | a += b--; | return x + identity(a + b); | }(0); | return a + b + c + d + e; | } | | int | test3() | { | const auto nullary = [](){ return 0; }; | const auto unary = [](int x){ return x; }; | using nullary_t = decltype(nullary); | using unary_t = decltype(unary); | const auto higher1st = [](nullary_t f){ return f(); }; | const auto higher2nd = [unary](nullary_t f1){ | return [unary, f1](unary_t f2){ return f2(unary(f1())); }; | }; | return higher1st(nullary) + higher2nd(nullary)(unary); | } | | } | | namespace test_variadic_templates | { | | template | struct sum; | | template | struct sum | { | static constexpr auto value = N0 + sum::value; | }; | | template <> | struct sum<> | { | static constexpr auto value = 0; | }; | | static_assert(sum<>::value == 0, ""); | static_assert(sum<1>::value == 1, ""); | static_assert(sum<23>::value == 23, ""); | static_assert(sum<1, 2>::value == 3, ""); | static_assert(sum<5, 5, 11>::value == 21, ""); | static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); | | } | | // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae | // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function | // because of this. | namespace test_template_alias_sfinae | { | | struct foo {}; | | template | using member = typename T::member_type; | | template | void func(...) {} | | template | void func(member*) {} | | void test(); | | void test() { func(0); } | | } | | } // namespace cxx11 | | #endif // __cplusplus >= 201103L | | | | | // If the compiler admits that it is not ready for C++14, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201402L | | #error "This is not a C++14 compiler" | | #else | | namespace cxx14 | { | | namespace test_polymorphic_lambdas | { | | int | test() | { | const auto lambda = [](auto&&... args){ | const auto istiny = [](auto x){ | return (sizeof(x) == 1UL) ? 1 : 0; | }; | const int aretiny[] = { istiny(args)... }; | return aretiny[0]; | }; | return lambda(1, 1L, 1.0f, '1'); | } | | } | | namespace test_binary_literals | { | | constexpr auto ivii = 0b0000000000101010; | static_assert(ivii == 42, "wrong value"); | | } | | namespace test_generalized_constexpr | { | | template < typename CharT > | constexpr unsigned long | strlen_c(const CharT *const s) noexcept | { | auto length = 0UL; | for (auto p = s; *p; ++p) | ++length; | return length; | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("x") == 1UL, ""); | static_assert(strlen_c("test") == 4UL, ""); | static_assert(strlen_c("another\0test") == 7UL, ""); | | } | | namespace test_lambda_init_capture | { | | int | test() | { | auto x = 0; | const auto lambda1 = [a = x](int b){ return a + b; }; | const auto lambda2 = [a = lambda1(x)](){ return a; }; | return lambda2(); | } | | } | | namespace test_digit_separators | { | | constexpr auto ten_million = 100'000'000; | static_assert(ten_million == 100000000, ""); | | } | | namespace test_return_type_deduction | { | | auto f(int& x) { return x; } | decltype(auto) g(int& x) { return x; } | | template < typename T1, typename T2 > | struct is_same | { | static constexpr auto value = false; | }; | | template < typename T > | struct is_same | { | static constexpr auto value = true; | }; | | int | test() | { | auto x = 0; | static_assert(is_same::value, ""); | static_assert(is_same::value, ""); | return x; | } | | } | | } // namespace cxx14 | | #endif // __cplusplus >= 201402L | | | configure:6510: result: no configure:6527: checking whether /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ supports C++14 features with -std=c++14 configure:6943: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=c++14 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 arm-none-linux-gnueabi-g++: error: unrecognized command line option '-std=c++14' configure:6943: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | /* end confdefs.h. */ | | | // If the compiler admits that it is not ready for C++11, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201103L | | #error "This is not a C++11 compiler" | | #else | | namespace cxx11 | { | | namespace test_static_assert | { | | template | struct check | { | static_assert(sizeof(int) <= sizeof(T), "not big enough"); | }; | | } | | namespace test_final_override | { | | struct Base | { | virtual void f() {} | }; | | struct Derived : public Base | { | virtual void f() override {} | }; | | } | | namespace test_double_right_angle_brackets | { | | template < typename T > | struct check {}; | | typedef check single_type; | typedef check> double_type; | typedef check>> triple_type; | typedef check>>> quadruple_type; | | } | | namespace test_decltype | { | | int | f() | { | int a = 1; | decltype(a) b = 2; | return a + b; | } | | } | | namespace test_type_deduction | { | | template < typename T1, typename T2 > | struct is_same | { | static const bool value = false; | }; | | template < typename T > | struct is_same | { | static const bool value = true; | }; | | template < typename T1, typename T2 > | auto | add(T1 a1, T2 a2) -> decltype(a1 + a2) | { | return a1 + a2; | } | | int | test(const int c, volatile int v) | { | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == false, ""); | auto ac = c; | auto av = v; | auto sumi = ac + av + 'x'; | auto sumf = ac + av + 1.0; | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == true, ""); | return (sumf > 0.0) ? sumi : add(c, v); | } | | } | | namespace test_noexcept | { | | int f() { return 0; } | int g() noexcept { return 0; } | | static_assert(noexcept(f()) == false, ""); | static_assert(noexcept(g()) == true, ""); | | } | | namespace test_constexpr | { | | template < typename CharT > | unsigned long constexpr | strlen_c_r(const CharT *const s, const unsigned long acc) noexcept | { | return *s ? strlen_c_r(s + 1, acc + 1) : acc; | } | | template < typename CharT > | unsigned long constexpr | strlen_c(const CharT *const s) noexcept | { | return strlen_c_r(s, 0UL); | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("1") == 1UL, ""); | static_assert(strlen_c("example") == 7UL, ""); | static_assert(strlen_c("another\0example") == 7UL, ""); | | } | | namespace test_rvalue_references | { | | template < int N > | struct answer | { | static constexpr int value = N; | }; | | answer<1> f(int&) { return answer<1>(); } | answer<2> f(const int&) { return answer<2>(); } | answer<3> f(int&&) { return answer<3>(); } | | void | test() | { | int i = 0; | const int c = 0; | static_assert(decltype(f(i))::value == 1, ""); | static_assert(decltype(f(c))::value == 2, ""); | static_assert(decltype(f(0))::value == 3, ""); | } | | } | | namespace test_uniform_initialization | { | | struct test | { | static const int zero {}; | static const int one {1}; | }; | | static_assert(test::zero == 0, ""); | static_assert(test::one == 1, ""); | | } | | namespace test_lambdas | { | | void | test1() | { | auto lambda1 = [](){}; | auto lambda2 = lambda1; | lambda1(); | lambda2(); | } | | int | test2() | { | auto a = [](int i, int j){ return i + j; }(1, 2); | auto b = []() -> int { return '0'; }(); | auto c = [=](){ return a + b; }(); | auto d = [&](){ return c; }(); | auto e = [a, &b](int x) mutable { | const auto identity = [](int y){ return y; }; | for (auto i = 0; i < a; ++i) | a += b--; | return x + identity(a + b); | }(0); | return a + b + c + d + e; | } | | int | test3() | { | const auto nullary = [](){ return 0; }; | const auto unary = [](int x){ return x; }; | using nullary_t = decltype(nullary); | using unary_t = decltype(unary); | const auto higher1st = [](nullary_t f){ return f(); }; | const auto higher2nd = [unary](nullary_t f1){ | return [unary, f1](unary_t f2){ return f2(unary(f1())); }; | }; | return higher1st(nullary) + higher2nd(nullary)(unary); | } | | } | | namespace test_variadic_templates | { | | template | struct sum; | | template | struct sum | { | static constexpr auto value = N0 + sum::value; | }; | | template <> | struct sum<> | { | static constexpr auto value = 0; | }; | | static_assert(sum<>::value == 0, ""); | static_assert(sum<1>::value == 1, ""); | static_assert(sum<23>::value == 23, ""); | static_assert(sum<1, 2>::value == 3, ""); | static_assert(sum<5, 5, 11>::value == 21, ""); | static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); | | } | | // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae | // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function | // because of this. | namespace test_template_alias_sfinae | { | | struct foo {}; | | template | using member = typename T::member_type; | | template | void func(...) {} | | template | void func(member*) {} | | void test(); | | void test() { func(0); } | | } | | } // namespace cxx11 | | #endif // __cplusplus >= 201103L | | | | | // If the compiler admits that it is not ready for C++14, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201402L | | #error "This is not a C++14 compiler" | | #else | | namespace cxx14 | { | | namespace test_polymorphic_lambdas | { | | int | test() | { | const auto lambda = [](auto&&... args){ | const auto istiny = [](auto x){ | return (sizeof(x) == 1UL) ? 1 : 0; | }; | const int aretiny[] = { istiny(args)... }; | return aretiny[0]; | }; | return lambda(1, 1L, 1.0f, '1'); | } | | } | | namespace test_binary_literals | { | | constexpr auto ivii = 0b0000000000101010; | static_assert(ivii == 42, "wrong value"); | | } | | namespace test_generalized_constexpr | { | | template < typename CharT > | constexpr unsigned long | strlen_c(const CharT *const s) noexcept | { | auto length = 0UL; | for (auto p = s; *p; ++p) | ++length; | return length; | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("x") == 1UL, ""); | static_assert(strlen_c("test") == 4UL, ""); | static_assert(strlen_c("another\0test") == 7UL, ""); | | } | | namespace test_lambda_init_capture | { | | int | test() | { | auto x = 0; | const auto lambda1 = [a = x](int b){ return a + b; }; | const auto lambda2 = [a = lambda1(x)](){ return a; }; | return lambda2(); | } | | } | | namespace test_digit_separators | { | | constexpr auto ten_million = 100'000'000; | static_assert(ten_million == 100000000, ""); | | } | | namespace test_return_type_deduction | { | | auto f(int& x) { return x; } | decltype(auto) g(int& x) { return x; } | | template < typename T1, typename T2 > | struct is_same | { | static constexpr auto value = false; | }; | | template < typename T > | struct is_same | { | static constexpr auto value = true; | }; | | int | test() | { | auto x = 0; | static_assert(is_same::value, ""); | static_assert(is_same::value, ""); | return x; | } | | } | | } // namespace cxx14 | | #endif // __cplusplus >= 201402L | | | configure:6952: result: no configure:6527: checking whether /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ supports C++14 features with +std=c++14 configure:6943: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ +std=c++14 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 arm-none-linux-gnueabi-g++: error: +std=c++14: No such file or directory configure:6943: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | /* end confdefs.h. */ | | | // If the compiler admits that it is not ready for C++11, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201103L | | #error "This is not a C++11 compiler" | | #else | | namespace cxx11 | { | | namespace test_static_assert | { | | template | struct check | { | static_assert(sizeof(int) <= sizeof(T), "not big enough"); | }; | | } | | namespace test_final_override | { | | struct Base | { | virtual void f() {} | }; | | struct Derived : public Base | { | virtual void f() override {} | }; | | } | | namespace test_double_right_angle_brackets | { | | template < typename T > | struct check {}; | | typedef check single_type; | typedef check> double_type; | typedef check>> triple_type; | typedef check>>> quadruple_type; | | } | | namespace test_decltype | { | | int | f() | { | int a = 1; | decltype(a) b = 2; | return a + b; | } | | } | | namespace test_type_deduction | { | | template < typename T1, typename T2 > | struct is_same | { | static const bool value = false; | }; | | template < typename T > | struct is_same | { | static const bool value = true; | }; | | template < typename T1, typename T2 > | auto | add(T1 a1, T2 a2) -> decltype(a1 + a2) | { | return a1 + a2; | } | | int | test(const int c, volatile int v) | { | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == false, ""); | auto ac = c; | auto av = v; | auto sumi = ac + av + 'x'; | auto sumf = ac + av + 1.0; | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == true, ""); | return (sumf > 0.0) ? sumi : add(c, v); | } | | } | | namespace test_noexcept | { | | int f() { return 0; } | int g() noexcept { return 0; } | | static_assert(noexcept(f()) == false, ""); | static_assert(noexcept(g()) == true, ""); | | } | | namespace test_constexpr | { | | template < typename CharT > | unsigned long constexpr | strlen_c_r(const CharT *const s, const unsigned long acc) noexcept | { | return *s ? strlen_c_r(s + 1, acc + 1) : acc; | } | | template < typename CharT > | unsigned long constexpr | strlen_c(const CharT *const s) noexcept | { | return strlen_c_r(s, 0UL); | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("1") == 1UL, ""); | static_assert(strlen_c("example") == 7UL, ""); | static_assert(strlen_c("another\0example") == 7UL, ""); | | } | | namespace test_rvalue_references | { | | template < int N > | struct answer | { | static constexpr int value = N; | }; | | answer<1> f(int&) { return answer<1>(); } | answer<2> f(const int&) { return answer<2>(); } | answer<3> f(int&&) { return answer<3>(); } | | void | test() | { | int i = 0; | const int c = 0; | static_assert(decltype(f(i))::value == 1, ""); | static_assert(decltype(f(c))::value == 2, ""); | static_assert(decltype(f(0))::value == 3, ""); | } | | } | | namespace test_uniform_initialization | { | | struct test | { | static const int zero {}; | static const int one {1}; | }; | | static_assert(test::zero == 0, ""); | static_assert(test::one == 1, ""); | | } | | namespace test_lambdas | { | | void | test1() | { | auto lambda1 = [](){}; | auto lambda2 = lambda1; | lambda1(); | lambda2(); | } | | int | test2() | { | auto a = [](int i, int j){ return i + j; }(1, 2); | auto b = []() -> int { return '0'; }(); | auto c = [=](){ return a + b; }(); | auto d = [&](){ return c; }(); | auto e = [a, &b](int x) mutable { | const auto identity = [](int y){ return y; }; | for (auto i = 0; i < a; ++i) | a += b--; | return x + identity(a + b); | }(0); | return a + b + c + d + e; | } | | int | test3() | { | const auto nullary = [](){ return 0; }; | const auto unary = [](int x){ return x; }; | using nullary_t = decltype(nullary); | using unary_t = decltype(unary); | const auto higher1st = [](nullary_t f){ return f(); }; | const auto higher2nd = [unary](nullary_t f1){ | return [unary, f1](unary_t f2){ return f2(unary(f1())); }; | }; | return higher1st(nullary) + higher2nd(nullary)(unary); | } | | } | | namespace test_variadic_templates | { | | template | struct sum; | | template | struct sum | { | static constexpr auto value = N0 + sum::value; | }; | | template <> | struct sum<> | { | static constexpr auto value = 0; | }; | | static_assert(sum<>::value == 0, ""); | static_assert(sum<1>::value == 1, ""); | static_assert(sum<23>::value == 23, ""); | static_assert(sum<1, 2>::value == 3, ""); | static_assert(sum<5, 5, 11>::value == 21, ""); | static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); | | } | | // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae | // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function | // because of this. | namespace test_template_alias_sfinae | { | | struct foo {}; | | template | using member = typename T::member_type; | | template | void func(...) {} | | template | void func(member*) {} | | void test(); | | void test() { func(0); } | | } | | } // namespace cxx11 | | #endif // __cplusplus >= 201103L | | | | | // If the compiler admits that it is not ready for C++14, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201402L | | #error "This is not a C++14 compiler" | | #else | | namespace cxx14 | { | | namespace test_polymorphic_lambdas | { | | int | test() | { | const auto lambda = [](auto&&... args){ | const auto istiny = [](auto x){ | return (sizeof(x) == 1UL) ? 1 : 0; | }; | const int aretiny[] = { istiny(args)... }; | return aretiny[0]; | }; | return lambda(1, 1L, 1.0f, '1'); | } | | } | | namespace test_binary_literals | { | | constexpr auto ivii = 0b0000000000101010; | static_assert(ivii == 42, "wrong value"); | | } | | namespace test_generalized_constexpr | { | | template < typename CharT > | constexpr unsigned long | strlen_c(const CharT *const s) noexcept | { | auto length = 0UL; | for (auto p = s; *p; ++p) | ++length; | return length; | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("x") == 1UL, ""); | static_assert(strlen_c("test") == 4UL, ""); | static_assert(strlen_c("another\0test") == 7UL, ""); | | } | | namespace test_lambda_init_capture | { | | int | test() | { | auto x = 0; | const auto lambda1 = [a = x](int b){ return a + b; }; | const auto lambda2 = [a = lambda1(x)](){ return a; }; | return lambda2(); | } | | } | | namespace test_digit_separators | { | | constexpr auto ten_million = 100'000'000; | static_assert(ten_million == 100000000, ""); | | } | | namespace test_return_type_deduction | { | | auto f(int& x) { return x; } | decltype(auto) g(int& x) { return x; } | | template < typename T1, typename T2 > | struct is_same | { | static constexpr auto value = false; | }; | | template < typename T > | struct is_same | { | static constexpr auto value = true; | }; | | int | test() | { | auto x = 0; | static_assert(is_same::value, ""); | static_assert(is_same::value, ""); | return x; | } | | } | | } // namespace cxx14 | | #endif // __cplusplus >= 201402L | | | configure:6952: result: no configure:6527: checking whether /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ supports C++14 features with -h std=c++14 configure:6943: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -h std=c++14 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 conftest.cpp:24:2: error: #error "This is not a C++11 compiler" #error "This is not a C++11 compiler" ^ conftest.cpp:309:2: error: #error "This is not a C++14 compiler" #error "This is not a C++14 compiler" ^ configure:6943: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | /* end confdefs.h. */ | | | // If the compiler admits that it is not ready for C++11, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201103L | | #error "This is not a C++11 compiler" | | #else | | namespace cxx11 | { | | namespace test_static_assert | { | | template | struct check | { | static_assert(sizeof(int) <= sizeof(T), "not big enough"); | }; | | } | | namespace test_final_override | { | | struct Base | { | virtual void f() {} | }; | | struct Derived : public Base | { | virtual void f() override {} | }; | | } | | namespace test_double_right_angle_brackets | { | | template < typename T > | struct check {}; | | typedef check single_type; | typedef check> double_type; | typedef check>> triple_type; | typedef check>>> quadruple_type; | | } | | namespace test_decltype | { | | int | f() | { | int a = 1; | decltype(a) b = 2; | return a + b; | } | | } | | namespace test_type_deduction | { | | template < typename T1, typename T2 > | struct is_same | { | static const bool value = false; | }; | | template < typename T > | struct is_same | { | static const bool value = true; | }; | | template < typename T1, typename T2 > | auto | add(T1 a1, T2 a2) -> decltype(a1 + a2) | { | return a1 + a2; | } | | int | test(const int c, volatile int v) | { | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == false, ""); | auto ac = c; | auto av = v; | auto sumi = ac + av + 'x'; | auto sumf = ac + av + 1.0; | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == true, ""); | return (sumf > 0.0) ? sumi : add(c, v); | } | | } | | namespace test_noexcept | { | | int f() { return 0; } | int g() noexcept { return 0; } | | static_assert(noexcept(f()) == false, ""); | static_assert(noexcept(g()) == true, ""); | | } | | namespace test_constexpr | { | | template < typename CharT > | unsigned long constexpr | strlen_c_r(const CharT *const s, const unsigned long acc) noexcept | { | return *s ? strlen_c_r(s + 1, acc + 1) : acc; | } | | template < typename CharT > | unsigned long constexpr | strlen_c(const CharT *const s) noexcept | { | return strlen_c_r(s, 0UL); | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("1") == 1UL, ""); | static_assert(strlen_c("example") == 7UL, ""); | static_assert(strlen_c("another\0example") == 7UL, ""); | | } | | namespace test_rvalue_references | { | | template < int N > | struct answer | { | static constexpr int value = N; | }; | | answer<1> f(int&) { return answer<1>(); } | answer<2> f(const int&) { return answer<2>(); } | answer<3> f(int&&) { return answer<3>(); } | | void | test() | { | int i = 0; | const int c = 0; | static_assert(decltype(f(i))::value == 1, ""); | static_assert(decltype(f(c))::value == 2, ""); | static_assert(decltype(f(0))::value == 3, ""); | } | | } | | namespace test_uniform_initialization | { | | struct test | { | static const int zero {}; | static const int one {1}; | }; | | static_assert(test::zero == 0, ""); | static_assert(test::one == 1, ""); | | } | | namespace test_lambdas | { | | void | test1() | { | auto lambda1 = [](){}; | auto lambda2 = lambda1; | lambda1(); | lambda2(); | } | | int | test2() | { | auto a = [](int i, int j){ return i + j; }(1, 2); | auto b = []() -> int { return '0'; }(); | auto c = [=](){ return a + b; }(); | auto d = [&](){ return c; }(); | auto e = [a, &b](int x) mutable { | const auto identity = [](int y){ return y; }; | for (auto i = 0; i < a; ++i) | a += b--; | return x + identity(a + b); | }(0); | return a + b + c + d + e; | } | | int | test3() | { | const auto nullary = [](){ return 0; }; | const auto unary = [](int x){ return x; }; | using nullary_t = decltype(nullary); | using unary_t = decltype(unary); | const auto higher1st = [](nullary_t f){ return f(); }; | const auto higher2nd = [unary](nullary_t f1){ | return [unary, f1](unary_t f2){ return f2(unary(f1())); }; | }; | return higher1st(nullary) + higher2nd(nullary)(unary); | } | | } | | namespace test_variadic_templates | { | | template | struct sum; | | template | struct sum | { | static constexpr auto value = N0 + sum::value; | }; | | template <> | struct sum<> | { | static constexpr auto value = 0; | }; | | static_assert(sum<>::value == 0, ""); | static_assert(sum<1>::value == 1, ""); | static_assert(sum<23>::value == 23, ""); | static_assert(sum<1, 2>::value == 3, ""); | static_assert(sum<5, 5, 11>::value == 21, ""); | static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); | | } | | // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae | // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function | // because of this. | namespace test_template_alias_sfinae | { | | struct foo {}; | | template | using member = typename T::member_type; | | template | void func(...) {} | | template | void func(member*) {} | | void test(); | | void test() { func(0); } | | } | | } // namespace cxx11 | | #endif // __cplusplus >= 201103L | | | | | // If the compiler admits that it is not ready for C++14, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201402L | | #error "This is not a C++14 compiler" | | #else | | namespace cxx14 | { | | namespace test_polymorphic_lambdas | { | | int | test() | { | const auto lambda = [](auto&&... args){ | const auto istiny = [](auto x){ | return (sizeof(x) == 1UL) ? 1 : 0; | }; | const int aretiny[] = { istiny(args)... }; | return aretiny[0]; | }; | return lambda(1, 1L, 1.0f, '1'); | } | | } | | namespace test_binary_literals | { | | constexpr auto ivii = 0b0000000000101010; | static_assert(ivii == 42, "wrong value"); | | } | | namespace test_generalized_constexpr | { | | template < typename CharT > | constexpr unsigned long | strlen_c(const CharT *const s) noexcept | { | auto length = 0UL; | for (auto p = s; *p; ++p) | ++length; | return length; | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("x") == 1UL, ""); | static_assert(strlen_c("test") == 4UL, ""); | static_assert(strlen_c("another\0test") == 7UL, ""); | | } | | namespace test_lambda_init_capture | { | | int | test() | { | auto x = 0; | const auto lambda1 = [a = x](int b){ return a + b; }; | const auto lambda2 = [a = lambda1(x)](){ return a; }; | return lambda2(); | } | | } | | namespace test_digit_separators | { | | constexpr auto ten_million = 100'000'000; | static_assert(ten_million == 100000000, ""); | | } | | namespace test_return_type_deduction | { | | auto f(int& x) { return x; } | decltype(auto) g(int& x) { return x; } | | template < typename T1, typename T2 > | struct is_same | { | static constexpr auto value = false; | }; | | template < typename T > | struct is_same | { | static constexpr auto value = true; | }; | | int | test() | { | auto x = 0; | static_assert(is_same::value, ""); | static_assert(is_same::value, ""); | return x; | } | | } | | } // namespace cxx14 | | #endif // __cplusplus >= 201402L | | | configure:6952: result: no configure:6527: checking whether /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ supports C++14 features with -std=c++1y configure:6943: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=c++1y -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 conftest.cpp:309:2: error: #error "This is not a C++14 compiler" #error "This is not a C++14 compiler" ^ configure:6943: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | /* end confdefs.h. */ | | | // If the compiler admits that it is not ready for C++11, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201103L | | #error "This is not a C++11 compiler" | | #else | | namespace cxx11 | { | | namespace test_static_assert | { | | template | struct check | { | static_assert(sizeof(int) <= sizeof(T), "not big enough"); | }; | | } | | namespace test_final_override | { | | struct Base | { | virtual void f() {} | }; | | struct Derived : public Base | { | virtual void f() override {} | }; | | } | | namespace test_double_right_angle_brackets | { | | template < typename T > | struct check {}; | | typedef check single_type; | typedef check> double_type; | typedef check>> triple_type; | typedef check>>> quadruple_type; | | } | | namespace test_decltype | { | | int | f() | { | int a = 1; | decltype(a) b = 2; | return a + b; | } | | } | | namespace test_type_deduction | { | | template < typename T1, typename T2 > | struct is_same | { | static const bool value = false; | }; | | template < typename T > | struct is_same | { | static const bool value = true; | }; | | template < typename T1, typename T2 > | auto | add(T1 a1, T2 a2) -> decltype(a1 + a2) | { | return a1 + a2; | } | | int | test(const int c, volatile int v) | { | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == false, ""); | auto ac = c; | auto av = v; | auto sumi = ac + av + 'x'; | auto sumf = ac + av + 1.0; | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == true, ""); | return (sumf > 0.0) ? sumi : add(c, v); | } | | } | | namespace test_noexcept | { | | int f() { return 0; } | int g() noexcept { return 0; } | | static_assert(noexcept(f()) == false, ""); | static_assert(noexcept(g()) == true, ""); | | } | | namespace test_constexpr | { | | template < typename CharT > | unsigned long constexpr | strlen_c_r(const CharT *const s, const unsigned long acc) noexcept | { | return *s ? strlen_c_r(s + 1, acc + 1) : acc; | } | | template < typename CharT > | unsigned long constexpr | strlen_c(const CharT *const s) noexcept | { | return strlen_c_r(s, 0UL); | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("1") == 1UL, ""); | static_assert(strlen_c("example") == 7UL, ""); | static_assert(strlen_c("another\0example") == 7UL, ""); | | } | | namespace test_rvalue_references | { | | template < int N > | struct answer | { | static constexpr int value = N; | }; | | answer<1> f(int&) { return answer<1>(); } | answer<2> f(const int&) { return answer<2>(); } | answer<3> f(int&&) { return answer<3>(); } | | void | test() | { | int i = 0; | const int c = 0; | static_assert(decltype(f(i))::value == 1, ""); | static_assert(decltype(f(c))::value == 2, ""); | static_assert(decltype(f(0))::value == 3, ""); | } | | } | | namespace test_uniform_initialization | { | | struct test | { | static const int zero {}; | static const int one {1}; | }; | | static_assert(test::zero == 0, ""); | static_assert(test::one == 1, ""); | | } | | namespace test_lambdas | { | | void | test1() | { | auto lambda1 = [](){}; | auto lambda2 = lambda1; | lambda1(); | lambda2(); | } | | int | test2() | { | auto a = [](int i, int j){ return i + j; }(1, 2); | auto b = []() -> int { return '0'; }(); | auto c = [=](){ return a + b; }(); | auto d = [&](){ return c; }(); | auto e = [a, &b](int x) mutable { | const auto identity = [](int y){ return y; }; | for (auto i = 0; i < a; ++i) | a += b--; | return x + identity(a + b); | }(0); | return a + b + c + d + e; | } | | int | test3() | { | const auto nullary = [](){ return 0; }; | const auto unary = [](int x){ return x; }; | using nullary_t = decltype(nullary); | using unary_t = decltype(unary); | const auto higher1st = [](nullary_t f){ return f(); }; | const auto higher2nd = [unary](nullary_t f1){ | return [unary, f1](unary_t f2){ return f2(unary(f1())); }; | }; | return higher1st(nullary) + higher2nd(nullary)(unary); | } | | } | | namespace test_variadic_templates | { | | template | struct sum; | | template | struct sum | { | static constexpr auto value = N0 + sum::value; | }; | | template <> | struct sum<> | { | static constexpr auto value = 0; | }; | | static_assert(sum<>::value == 0, ""); | static_assert(sum<1>::value == 1, ""); | static_assert(sum<23>::value == 23, ""); | static_assert(sum<1, 2>::value == 3, ""); | static_assert(sum<5, 5, 11>::value == 21, ""); | static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); | | } | | // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae | // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function | // because of this. | namespace test_template_alias_sfinae | { | | struct foo {}; | | template | using member = typename T::member_type; | | template | void func(...) {} | | template | void func(member*) {} | | void test(); | | void test() { func(0); } | | } | | } // namespace cxx11 | | #endif // __cplusplus >= 201103L | | | | | // If the compiler admits that it is not ready for C++14, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201402L | | #error "This is not a C++14 compiler" | | #else | | namespace cxx14 | { | | namespace test_polymorphic_lambdas | { | | int | test() | { | const auto lambda = [](auto&&... args){ | const auto istiny = [](auto x){ | return (sizeof(x) == 1UL) ? 1 : 0; | }; | const int aretiny[] = { istiny(args)... }; | return aretiny[0]; | }; | return lambda(1, 1L, 1.0f, '1'); | } | | } | | namespace test_binary_literals | { | | constexpr auto ivii = 0b0000000000101010; | static_assert(ivii == 42, "wrong value"); | | } | | namespace test_generalized_constexpr | { | | template < typename CharT > | constexpr unsigned long | strlen_c(const CharT *const s) noexcept | { | auto length = 0UL; | for (auto p = s; *p; ++p) | ++length; | return length; | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("x") == 1UL, ""); | static_assert(strlen_c("test") == 4UL, ""); | static_assert(strlen_c("another\0test") == 7UL, ""); | | } | | namespace test_lambda_init_capture | { | | int | test() | { | auto x = 0; | const auto lambda1 = [a = x](int b){ return a + b; }; | const auto lambda2 = [a = lambda1(x)](){ return a; }; | return lambda2(); | } | | } | | namespace test_digit_separators | { | | constexpr auto ten_million = 100'000'000; | static_assert(ten_million == 100000000, ""); | | } | | namespace test_return_type_deduction | { | | auto f(int& x) { return x; } | decltype(auto) g(int& x) { return x; } | | template < typename T1, typename T2 > | struct is_same | { | static constexpr auto value = false; | }; | | template < typename T > | struct is_same | { | static constexpr auto value = true; | }; | | int | test() | { | auto x = 0; | static_assert(is_same::value, ""); | static_assert(is_same::value, ""); | return x; | } | | } | | } // namespace cxx14 | | #endif // __cplusplus >= 201402L | | | configure:6952: result: no configure:6527: checking whether /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ supports C++14 features with +std=c++1y configure:6943: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ +std=c++1y -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 arm-none-linux-gnueabi-g++: error: +std=c++1y: No such file or directory configure:6943: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | /* end confdefs.h. */ | | | // If the compiler admits that it is not ready for C++11, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201103L | | #error "This is not a C++11 compiler" | | #else | | namespace cxx11 | { | | namespace test_static_assert | { | | template | struct check | { | static_assert(sizeof(int) <= sizeof(T), "not big enough"); | }; | | } | | namespace test_final_override | { | | struct Base | { | virtual void f() {} | }; | | struct Derived : public Base | { | virtual void f() override {} | }; | | } | | namespace test_double_right_angle_brackets | { | | template < typename T > | struct check {}; | | typedef check single_type; | typedef check> double_type; | typedef check>> triple_type; | typedef check>>> quadruple_type; | | } | | namespace test_decltype | { | | int | f() | { | int a = 1; | decltype(a) b = 2; | return a + b; | } | | } | | namespace test_type_deduction | { | | template < typename T1, typename T2 > | struct is_same | { | static const bool value = false; | }; | | template < typename T > | struct is_same | { | static const bool value = true; | }; | | template < typename T1, typename T2 > | auto | add(T1 a1, T2 a2) -> decltype(a1 + a2) | { | return a1 + a2; | } | | int | test(const int c, volatile int v) | { | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == false, ""); | auto ac = c; | auto av = v; | auto sumi = ac + av + 'x'; | auto sumf = ac + av + 1.0; | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == true, ""); | return (sumf > 0.0) ? sumi : add(c, v); | } | | } | | namespace test_noexcept | { | | int f() { return 0; } | int g() noexcept { return 0; } | | static_assert(noexcept(f()) == false, ""); | static_assert(noexcept(g()) == true, ""); | | } | | namespace test_constexpr | { | | template < typename CharT > | unsigned long constexpr | strlen_c_r(const CharT *const s, const unsigned long acc) noexcept | { | return *s ? strlen_c_r(s + 1, acc + 1) : acc; | } | | template < typename CharT > | unsigned long constexpr | strlen_c(const CharT *const s) noexcept | { | return strlen_c_r(s, 0UL); | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("1") == 1UL, ""); | static_assert(strlen_c("example") == 7UL, ""); | static_assert(strlen_c("another\0example") == 7UL, ""); | | } | | namespace test_rvalue_references | { | | template < int N > | struct answer | { | static constexpr int value = N; | }; | | answer<1> f(int&) { return answer<1>(); } | answer<2> f(const int&) { return answer<2>(); } | answer<3> f(int&&) { return answer<3>(); } | | void | test() | { | int i = 0; | const int c = 0; | static_assert(decltype(f(i))::value == 1, ""); | static_assert(decltype(f(c))::value == 2, ""); | static_assert(decltype(f(0))::value == 3, ""); | } | | } | | namespace test_uniform_initialization | { | | struct test | { | static const int zero {}; | static const int one {1}; | }; | | static_assert(test::zero == 0, ""); | static_assert(test::one == 1, ""); | | } | | namespace test_lambdas | { | | void | test1() | { | auto lambda1 = [](){}; | auto lambda2 = lambda1; | lambda1(); | lambda2(); | } | | int | test2() | { | auto a = [](int i, int j){ return i + j; }(1, 2); | auto b = []() -> int { return '0'; }(); | auto c = [=](){ return a + b; }(); | auto d = [&](){ return c; }(); | auto e = [a, &b](int x) mutable { | const auto identity = [](int y){ return y; }; | for (auto i = 0; i < a; ++i) | a += b--; | return x + identity(a + b); | }(0); | return a + b + c + d + e; | } | | int | test3() | { | const auto nullary = [](){ return 0; }; | const auto unary = [](int x){ return x; }; | using nullary_t = decltype(nullary); | using unary_t = decltype(unary); | const auto higher1st = [](nullary_t f){ return f(); }; | const auto higher2nd = [unary](nullary_t f1){ | return [unary, f1](unary_t f2){ return f2(unary(f1())); }; | }; | return higher1st(nullary) + higher2nd(nullary)(unary); | } | | } | | namespace test_variadic_templates | { | | template | struct sum; | | template | struct sum | { | static constexpr auto value = N0 + sum::value; | }; | | template <> | struct sum<> | { | static constexpr auto value = 0; | }; | | static_assert(sum<>::value == 0, ""); | static_assert(sum<1>::value == 1, ""); | static_assert(sum<23>::value == 23, ""); | static_assert(sum<1, 2>::value == 3, ""); | static_assert(sum<5, 5, 11>::value == 21, ""); | static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); | | } | | // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae | // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function | // because of this. | namespace test_template_alias_sfinae | { | | struct foo {}; | | template | using member = typename T::member_type; | | template | void func(...) {} | | template | void func(member*) {} | | void test(); | | void test() { func(0); } | | } | | } // namespace cxx11 | | #endif // __cplusplus >= 201103L | | | | | // If the compiler admits that it is not ready for C++14, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201402L | | #error "This is not a C++14 compiler" | | #else | | namespace cxx14 | { | | namespace test_polymorphic_lambdas | { | | int | test() | { | const auto lambda = [](auto&&... args){ | const auto istiny = [](auto x){ | return (sizeof(x) == 1UL) ? 1 : 0; | }; | const int aretiny[] = { istiny(args)... }; | return aretiny[0]; | }; | return lambda(1, 1L, 1.0f, '1'); | } | | } | | namespace test_binary_literals | { | | constexpr auto ivii = 0b0000000000101010; | static_assert(ivii == 42, "wrong value"); | | } | | namespace test_generalized_constexpr | { | | template < typename CharT > | constexpr unsigned long | strlen_c(const CharT *const s) noexcept | { | auto length = 0UL; | for (auto p = s; *p; ++p) | ++length; | return length; | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("x") == 1UL, ""); | static_assert(strlen_c("test") == 4UL, ""); | static_assert(strlen_c("another\0test") == 7UL, ""); | | } | | namespace test_lambda_init_capture | { | | int | test() | { | auto x = 0; | const auto lambda1 = [a = x](int b){ return a + b; }; | const auto lambda2 = [a = lambda1(x)](){ return a; }; | return lambda2(); | } | | } | | namespace test_digit_separators | { | | constexpr auto ten_million = 100'000'000; | static_assert(ten_million == 100000000, ""); | | } | | namespace test_return_type_deduction | { | | auto f(int& x) { return x; } | decltype(auto) g(int& x) { return x; } | | template < typename T1, typename T2 > | struct is_same | { | static constexpr auto value = false; | }; | | template < typename T > | struct is_same | { | static constexpr auto value = true; | }; | | int | test() | { | auto x = 0; | static_assert(is_same::value, ""); | static_assert(is_same::value, ""); | return x; | } | | } | | } // namespace cxx14 | | #endif // __cplusplus >= 201402L | | | configure:6952: result: no configure:6527: checking whether /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ supports C++14 features with -h std=c++1y configure:6943: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -h std=c++1y -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 conftest.cpp:24:2: error: #error "This is not a C++11 compiler" #error "This is not a C++11 compiler" ^ conftest.cpp:309:2: error: #error "This is not a C++14 compiler" #error "This is not a C++14 compiler" ^ configure:6943: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | /* end confdefs.h. */ | | | // If the compiler admits that it is not ready for C++11, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201103L | | #error "This is not a C++11 compiler" | | #else | | namespace cxx11 | { | | namespace test_static_assert | { | | template | struct check | { | static_assert(sizeof(int) <= sizeof(T), "not big enough"); | }; | | } | | namespace test_final_override | { | | struct Base | { | virtual void f() {} | }; | | struct Derived : public Base | { | virtual void f() override {} | }; | | } | | namespace test_double_right_angle_brackets | { | | template < typename T > | struct check {}; | | typedef check single_type; | typedef check> double_type; | typedef check>> triple_type; | typedef check>>> quadruple_type; | | } | | namespace test_decltype | { | | int | f() | { | int a = 1; | decltype(a) b = 2; | return a + b; | } | | } | | namespace test_type_deduction | { | | template < typename T1, typename T2 > | struct is_same | { | static const bool value = false; | }; | | template < typename T > | struct is_same | { | static const bool value = true; | }; | | template < typename T1, typename T2 > | auto | add(T1 a1, T2 a2) -> decltype(a1 + a2) | { | return a1 + a2; | } | | int | test(const int c, volatile int v) | { | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == false, ""); | auto ac = c; | auto av = v; | auto sumi = ac + av + 'x'; | auto sumf = ac + av + 1.0; | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == true, ""); | static_assert(is_same::value == false, ""); | static_assert(is_same::value == true, ""); | return (sumf > 0.0) ? sumi : add(c, v); | } | | } | | namespace test_noexcept | { | | int f() { return 0; } | int g() noexcept { return 0; } | | static_assert(noexcept(f()) == false, ""); | static_assert(noexcept(g()) == true, ""); | | } | | namespace test_constexpr | { | | template < typename CharT > | unsigned long constexpr | strlen_c_r(const CharT *const s, const unsigned long acc) noexcept | { | return *s ? strlen_c_r(s + 1, acc + 1) : acc; | } | | template < typename CharT > | unsigned long constexpr | strlen_c(const CharT *const s) noexcept | { | return strlen_c_r(s, 0UL); | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("1") == 1UL, ""); | static_assert(strlen_c("example") == 7UL, ""); | static_assert(strlen_c("another\0example") == 7UL, ""); | | } | | namespace test_rvalue_references | { | | template < int N > | struct answer | { | static constexpr int value = N; | }; | | answer<1> f(int&) { return answer<1>(); } | answer<2> f(const int&) { return answer<2>(); } | answer<3> f(int&&) { return answer<3>(); } | | void | test() | { | int i = 0; | const int c = 0; | static_assert(decltype(f(i))::value == 1, ""); | static_assert(decltype(f(c))::value == 2, ""); | static_assert(decltype(f(0))::value == 3, ""); | } | | } | | namespace test_uniform_initialization | { | | struct test | { | static const int zero {}; | static const int one {1}; | }; | | static_assert(test::zero == 0, ""); | static_assert(test::one == 1, ""); | | } | | namespace test_lambdas | { | | void | test1() | { | auto lambda1 = [](){}; | auto lambda2 = lambda1; | lambda1(); | lambda2(); | } | | int | test2() | { | auto a = [](int i, int j){ return i + j; }(1, 2); | auto b = []() -> int { return '0'; }(); | auto c = [=](){ return a + b; }(); | auto d = [&](){ return c; }(); | auto e = [a, &b](int x) mutable { | const auto identity = [](int y){ return y; }; | for (auto i = 0; i < a; ++i) | a += b--; | return x + identity(a + b); | }(0); | return a + b + c + d + e; | } | | int | test3() | { | const auto nullary = [](){ return 0; }; | const auto unary = [](int x){ return x; }; | using nullary_t = decltype(nullary); | using unary_t = decltype(unary); | const auto higher1st = [](nullary_t f){ return f(); }; | const auto higher2nd = [unary](nullary_t f1){ | return [unary, f1](unary_t f2){ return f2(unary(f1())); }; | }; | return higher1st(nullary) + higher2nd(nullary)(unary); | } | | } | | namespace test_variadic_templates | { | | template | struct sum; | | template | struct sum | { | static constexpr auto value = N0 + sum::value; | }; | | template <> | struct sum<> | { | static constexpr auto value = 0; | }; | | static_assert(sum<>::value == 0, ""); | static_assert(sum<1>::value == 1, ""); | static_assert(sum<23>::value == 23, ""); | static_assert(sum<1, 2>::value == 3, ""); | static_assert(sum<5, 5, 11>::value == 21, ""); | static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); | | } | | // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae | // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function | // because of this. | namespace test_template_alias_sfinae | { | | struct foo {}; | | template | using member = typename T::member_type; | | template | void func(...) {} | | template | void func(member*) {} | | void test(); | | void test() { func(0); } | | } | | } // namespace cxx11 | | #endif // __cplusplus >= 201103L | | | | | // If the compiler admits that it is not ready for C++14, why torture it? | // Hopefully, this will speed up the test. | | #ifndef __cplusplus | | #error "This is not a C++ compiler" | | #elif __cplusplus < 201402L | | #error "This is not a C++14 compiler" | | #else | | namespace cxx14 | { | | namespace test_polymorphic_lambdas | { | | int | test() | { | const auto lambda = [](auto&&... args){ | const auto istiny = [](auto x){ | return (sizeof(x) == 1UL) ? 1 : 0; | }; | const int aretiny[] = { istiny(args)... }; | return aretiny[0]; | }; | return lambda(1, 1L, 1.0f, '1'); | } | | } | | namespace test_binary_literals | { | | constexpr auto ivii = 0b0000000000101010; | static_assert(ivii == 42, "wrong value"); | | } | | namespace test_generalized_constexpr | { | | template < typename CharT > | constexpr unsigned long | strlen_c(const CharT *const s) noexcept | { | auto length = 0UL; | for (auto p = s; *p; ++p) | ++length; | return length; | } | | static_assert(strlen_c("") == 0UL, ""); | static_assert(strlen_c("x") == 1UL, ""); | static_assert(strlen_c("test") == 4UL, ""); | static_assert(strlen_c("another\0test") == 7UL, ""); | | } | | namespace test_lambda_init_capture | { | | int | test() | { | auto x = 0; | const auto lambda1 = [a = x](int b){ return a + b; }; | const auto lambda2 = [a = lambda1(x)](){ return a; }; | return lambda2(); | } | | } | | namespace test_digit_separators | { | | constexpr auto ten_million = 100'000'000; | static_assert(ten_million == 100000000, ""); | | } | | namespace test_return_type_deduction | { | | auto f(int& x) { return x; } | decltype(auto) g(int& x) { return x; } | | template < typename T1, typename T2 > | struct is_same | { | static constexpr auto value = false; | }; | | template < typename T > | struct is_same | { | static constexpr auto value = true; | }; | | int | test() | { | auto x = 0; | static_assert(is_same::value, ""); | static_assert(is_same::value, ""); | return x; | } | | } | | } // namespace cxx14 | | #endif // __cplusplus >= 201402L | | | configure:6952: result: no configure:6981: No compiler with C++14 support was found configure:7007: checking whether /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ supports C++11 features with -std=gnu++11 configure:7303: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 configure:7303: $? = 0 configure:7312: result: yes configure:7776: checking how to run the C++ preprocessor configure:7803: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -E -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp configure:7803: $? = 0 configure:7817: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -E -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp conftest.cpp:19:28: fatal error: ac_nonexistent.h: No such file or directory #include ^ compilation terminated. configure:7817: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | #define HAVE_CXX11 1 | #define SYSCONF_LOC "/etc" | #define LOCALSTATE_DIR "/var" | #define BIN_LOC "/usr/bin" | #define LIB_LOC "/usr/lib" | #define DATA_LOC "/usr/share" | /* end confdefs.h. */ | #include configure:7842: result: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -E configure:7862: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -E -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp configure:7862: $? = 0 configure:7876: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -E -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp conftest.cpp:19:28: fatal error: ac_nonexistent.h: No such file or directory #include ^ compilation terminated. configure:7876: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | #define HAVE_CXX11 1 | #define SYSCONF_LOC "/etc" | #define LOCALSTATE_DIR "/var" | #define BIN_LOC "/usr/bin" | #define LIB_LOC "/usr/lib" | #define DATA_LOC "/usr/share" | /* end confdefs.h. */ | #include configure:7905: checking for grep that handles long lines and -e configure:7963: result: /bin/grep configure:7968: checking for egrep configure:8030: result: /bin/grep -E configure:8035: checking for ANSI C header files configure:8055: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 configure:8055: $? = 0 configure:8139: result: yes configure:8152: checking for sys/types.h configure:8152: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 configure:8152: $? = 0 configure:8152: result: yes configure:8152: checking for sys/stat.h configure:8152: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 configure:8152: $? = 0 configure:8152: result: yes configure:8152: checking for stdlib.h configure:8152: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 configure:8152: $? = 0 configure:8152: result: yes configure:8152: checking for string.h configure:8152: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 configure:8152: $? = 0 configure:8152: result: yes configure:8152: checking for memory.h configure:8152: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 configure:8152: $? = 0 configure:8152: result: yes configure:8152: checking for strings.h configure:8152: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 configure:8152: $? = 0 configure:8152: result: yes configure:8152: checking for inttypes.h configure:8152: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 configure:8152: $? = 0 configure:8152: result: yes configure:8152: checking for stdint.h configure:8152: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 configure:8152: $? = 0 configure:8152: result: yes configure:8152: checking for unistd.h configure:8152: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 configure:8152: $? = 0 configure:8152: result: yes configure:8164: checking whether byte ordering is bigendian configure:8370: result: no configure:8493: WARNING: Disabling Python and Python-related tools configure:8796: checking for stdint.h configure:8796: result: yes configure:8830: checking for strerror_r() return configure:8850: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -rdynamic conftest.cpp -latomic >&5 conftest.cpp: In function 'int main()': conftest.cpp:42:47: error: invalid conversion from 'char*' to 'int' [-fpermissive] r = strerror_r(1, (char *) NULL, 0); ^ configure:8850: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | #define HAVE_CXX11 1 | #define SYSCONF_LOC "/etc" | #define LOCALSTATE_DIR "/var" | #define BIN_LOC "/usr/bin" | #define LIB_LOC "/usr/lib" | #define DATA_LOC "/usr/share" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define DEBUG_MUTEX_NAME 1 | #define TE_TYPE_SAFETY 1 | #define DISABLE_BACKWARD 1 | #define HAVE_STDINT_H 1 | /* end confdefs.h. */ | | #include | | int | main () | { | | int r; | | r = strerror_r(1, (char *) NULL, 0); | return 0; | | ; | return 0; | } configure:8865: result: char * configure:8873: checking for accept() addrlen type configure:8900: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -rdynamic conftest.cpp -latomic >&5 configure:8900: $? = 0 configure:8908: result: socklen_t configure:8920: checking for pipe2 configure:8942: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -rdynamic conftest.cpp -latomic >&5 configure:8942: $? = 0 configure:8950: result: yes configure:8969: checking for special C compiler options needed for large files configure:9014: result: no configure:9020: checking for _FILE_OFFSET_BITS value needed for large files configure:9045: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 configure:9045: $? = 0 configure:9077: result: no configure:9165: checking for dlopen in -ldl configure:9190: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -rdynamic conftest.cpp -ldl -latomic >&5 configure:9190: $? = 0 configure:9199: result: yes configure:9215: checking for deflate in -lz configure:9240: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -rdynamic conftest.cpp -lz -latomic -ldl >&5 configure:9240: $? = 0 configure:9249: result: yes configure:9265: checking for pthread_mutex_timedlock configure:9284: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -rdynamic conftest.cpp -latomic -ldl -lz >&5 /home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3/../../../../arm-none-linux-gnueabi/bin/ld: /tmp/cckVZGoe.o: undefined reference to symbol 'pthread_mutex_timedlock@@GLIBC_2.4' /home/buildroot/autobuild/instance-3/output-1/host/arm-buildroot-linux-gnueabi/sysroot/thumb2/lib/libpthread.so.0: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status configure:9284: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | #define HAVE_CXX11 1 | #define SYSCONF_LOC "/etc" | #define LOCALSTATE_DIR "/var" | #define BIN_LOC "/usr/bin" | #define LIB_LOC "/usr/lib" | #define DATA_LOC "/usr/share" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define DEBUG_MUTEX_NAME 1 | #define TE_TYPE_SAFETY 1 | #define DISABLE_BACKWARD 1 | #define HAVE_STDINT_H 1 | #define STRERROR_R_T char * | #define HAVE_SOCKLEN_T 1 | #define HAVE_PIPE2 1 | /* end confdefs.h. */ | | #include | #include | | int | main () | { | | pthread_mutex_timedlock(NULL, NULL); | return 0; | | ; | return 0; | } configure:9298: result: no configure:9303: checking for libm math function in std libs configure:9325: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -rdynamic conftest.cpp -latomic -ldl -lz >&5 configure:9325: $? = 0 configure:9380: result: yes configure:9390: checking for main in -lstdc++ configure:9409: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -rdynamic conftest.cpp -lstdc++ -latomic -ldl -lz >&5 configure:9409: $? = 0 configure:9418: result: yes configure:9453: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -rdynamic conftest.cpp -latomic -ldl -lz >&5 configure:9453: $? = 0 configure:9481: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -rdynamic conftest.cpp -latomic -ldl -lz >&5 configure:9481: $? = 0 configure:9494: checking for group 'root' configure:9501: result: yes configure:9510: checking for setproctitle configure:9510: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -rdynamic conftest.cpp -latomic -ldl -lz >&5 /tmp/ccmYfrmJ.o: In function `main': conftest.cpp:(.text.startup+0x2): undefined reference to `setproctitle' collect2: error: ld returned 1 exit status configure:9510: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | #define HAVE_CXX11 1 | #define SYSCONF_LOC "/etc" | #define LOCALSTATE_DIR "/var" | #define BIN_LOC "/usr/bin" | #define LIB_LOC "/usr/lib" | #define DATA_LOC "/usr/share" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define DEBUG_MUTEX_NAME 1 | #define TE_TYPE_SAFETY 1 | #define DISABLE_BACKWARD 1 | #define HAVE_STDINT_H 1 | #define STRERROR_R_T char * | #define HAVE_SOCKLEN_T 1 | #define HAVE_PIPE2 1 | /* end confdefs.h. */ | /* Define setproctitle to an innocuous variant, in case declares setproctitle. | For example, HP-UX 11i declares gettimeofday. */ | #define setproctitle innocuous_setproctitle | | /* System header to define __stub macros and hopefully few prototypes, | which can conflict with char setproctitle (); below. | Prefer to if __STDC__ is defined, since | exists even on freestanding compilers. */ | | #ifdef __STDC__ | # include | #else | # include | #endif | | #undef setproctitle | | /* Override any GCC internal prototype to avoid an error. | Use char because int might match the return type of a GCC | builtin and then its argument prototype would still apply. */ | #ifdef __cplusplus | extern "C" | #endif | char setproctitle (); | /* The GNU C library defines this for functions which it implements | to always fail with ENOSYS. Some functions are actually named | something starting with __ and the normal name is an alias. */ | #if defined __stub_setproctitle || defined __stub___setproctitle | choke me | #endif | | int | main () | { | return setproctitle (); | ; | return 0; | } configure:9510: result: no configure:9521: checking libutil.h usability configure:9521: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 conftest.cpp:69:21: fatal error: libutil.h: No such file or directory #include ^ compilation terminated. configure:9521: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | #define HAVE_CXX11 1 | #define SYSCONF_LOC "/etc" | #define LOCALSTATE_DIR "/var" | #define BIN_LOC "/usr/bin" | #define LIB_LOC "/usr/lib" | #define DATA_LOC "/usr/share" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define DEBUG_MUTEX_NAME 1 | #define TE_TYPE_SAFETY 1 | #define DISABLE_BACKWARD 1 | #define HAVE_STDINT_H 1 | #define STRERROR_R_T char * | #define HAVE_SOCKLEN_T 1 | #define HAVE_PIPE2 1 | /* end confdefs.h. */ | #include | #ifdef HAVE_SYS_TYPES_H | # include | #endif | #ifdef HAVE_SYS_STAT_H | # include | #endif | #ifdef STDC_HEADERS | # include | # include | #else | # ifdef HAVE_STDLIB_H | # include | # endif | #endif | #ifdef HAVE_STRING_H | # if !defined STDC_HEADERS && defined HAVE_MEMORY_H | # include | # endif | # include | #endif | #ifdef HAVE_STRINGS_H | # include | #endif | #ifdef HAVE_INTTYPES_H | # include | #endif | #ifdef HAVE_STDINT_H | # include | #endif | #ifdef HAVE_UNISTD_H | # include | #endif | #include configure:9521: result: no configure:9521: checking libutil.h presence configure:9521: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -E -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp conftest.cpp:36:21: fatal error: libutil.h: No such file or directory #include ^ compilation terminated. configure:9521: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | #define HAVE_CXX11 1 | #define SYSCONF_LOC "/etc" | #define LOCALSTATE_DIR "/var" | #define BIN_LOC "/usr/bin" | #define LIB_LOC "/usr/lib" | #define DATA_LOC "/usr/share" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define DEBUG_MUTEX_NAME 1 | #define TE_TYPE_SAFETY 1 | #define DISABLE_BACKWARD 1 | #define HAVE_STDINT_H 1 | #define STRERROR_R_T char * | #define HAVE_SOCKLEN_T 1 | #define HAVE_PIPE2 1 | /* end confdefs.h. */ | #include configure:9521: result: no configure:9521: checking for libutil.h configure:9521: result: no configure:9531: checking for setproctitle in -lutil configure:9556: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -rdynamic conftest.cpp -lutil -latomic -ldl -lz >&5 /tmp/cceX8bT2.o: In function `main': conftest.cpp:(.text.startup+0x2): undefined reference to `setproctitle' collect2: error: ld returned 1 exit status configure:9556: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | #define HAVE_CXX11 1 | #define SYSCONF_LOC "/etc" | #define LOCALSTATE_DIR "/var" | #define BIN_LOC "/usr/bin" | #define LIB_LOC "/usr/lib" | #define DATA_LOC "/usr/share" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define DEBUG_MUTEX_NAME 1 | #define TE_TYPE_SAFETY 1 | #define DISABLE_BACKWARD 1 | #define HAVE_STDINT_H 1 | #define STRERROR_R_T char * | #define HAVE_SOCKLEN_T 1 | #define HAVE_PIPE2 1 | /* end confdefs.h. */ | | /* Override any GCC internal prototype to avoid an error. | Use char because int might match the return type of a GCC | builtin and then its argument prototype would still apply. */ | #ifdef __cplusplus | extern "C" | #endif | char setproctitle (); | int | main () | { | return setproctitle (); | ; | return 0; | } configure:9565: result: no configure:9582: checking sys/pstat.h usability configure:9582: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 conftest.cpp:69:23: fatal error: sys/pstat.h: No such file or directory #include ^ compilation terminated. configure:9582: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | #define HAVE_CXX11 1 | #define SYSCONF_LOC "/etc" | #define LOCALSTATE_DIR "/var" | #define BIN_LOC "/usr/bin" | #define LIB_LOC "/usr/lib" | #define DATA_LOC "/usr/share" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define DEBUG_MUTEX_NAME 1 | #define TE_TYPE_SAFETY 1 | #define DISABLE_BACKWARD 1 | #define HAVE_STDINT_H 1 | #define STRERROR_R_T char * | #define HAVE_SOCKLEN_T 1 | #define HAVE_PIPE2 1 | /* end confdefs.h. */ | #include | #ifdef HAVE_SYS_TYPES_H | # include | #endif | #ifdef HAVE_SYS_STAT_H | # include | #endif | #ifdef STDC_HEADERS | # include | # include | #else | # ifdef HAVE_STDLIB_H | # include | # endif | #endif | #ifdef HAVE_STRING_H | # if !defined STDC_HEADERS && defined HAVE_MEMORY_H | # include | # endif | # include | #endif | #ifdef HAVE_STRINGS_H | # include | #endif | #ifdef HAVE_INTTYPES_H | # include | #endif | #ifdef HAVE_STDINT_H | # include | #endif | #ifdef HAVE_UNISTD_H | # include | #endif | #include configure:9582: result: no configure:9582: checking sys/pstat.h presence configure:9582: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -E -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp conftest.cpp:36:23: fatal error: sys/pstat.h: No such file or directory #include ^ compilation terminated. configure:9582: $? = 1 configure: failed program was: | /* confdefs.h */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL "" | #define SYS_LINUX 1 | #define GCC_VERSION_MAJOR 4 | #define GCC_VERSION_MINOR 8 | #define GCC_VERSION_PATCH 3 | #define HAVE_CXX11 1 | #define SYSCONF_LOC "/etc" | #define LOCALSTATE_DIR "/var" | #define BIN_LOC "/usr/bin" | #define LIB_LOC "/usr/lib" | #define DATA_LOC "/usr/share" | #define STDC_HEADERS 1 | #define HAVE_SYS_TYPES_H 1 | #define HAVE_SYS_STAT_H 1 | #define HAVE_STDLIB_H 1 | #define HAVE_STRING_H 1 | #define HAVE_MEMORY_H 1 | #define HAVE_STRINGS_H 1 | #define HAVE_INTTYPES_H 1 | #define HAVE_STDINT_H 1 | #define HAVE_UNISTD_H 1 | #define DEBUG_MUTEX_NAME 1 | #define TE_TYPE_SAFETY 1 | #define DISABLE_BACKWARD 1 | #define HAVE_STDINT_H 1 | #define STRERROR_R_T char * | #define HAVE_SOCKLEN_T 1 | #define HAVE_PIPE2 1 | /* end confdefs.h. */ | #include configure:9582: result: no configure:9582: checking for sys/pstat.h configure:9582: result: no conftest.cpp:36:22: fatal error: sys/exec.h: No such file or directory #include ^ compilation terminated. configure:9642: checking whether __progname and __progname_full are available configure:9658: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -rdynamic conftest.cpp -latomic -ldl -lz >&5 conftest.cpp: In function 'int main()': conftest.cpp:40:12: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] __progname = "foo"; __progname_full = "foo bar"; ^ conftest.cpp:40:37: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] __progname = "foo"; __progname_full = "foo bar"; ^ configure:9658: $? = 0 configure:9666: result: yes configure:9675: checking which argv replacement method to use configure:9697: result: writeable configure:9765: checking for linux/wireless.h configure:9765: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 configure:9765: $? = 0 configure:9765: result: yes configure:9783: checking that linux/wireless.h is what we expect configure:9809: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -rdynamic conftest.cpp -latomic -ldl -lz >&5 configure:9809: $? = 0 configure:9821: result: yes configure:9830: checking can we use iw_freq.flags configure:9853: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -rdynamic conftest.cpp -latomic -ldl -lz >&5 configure:9853: $? = 0 configure:9865: result: yes configure:9993: checking for pcre_compile in -lpcre configure:10018: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -rdynamic conftest.cpp -lpcre -latomic -ldl -lz >&5 configure:10018: $? = 0 configure:10027: result: yes configure:10044: checking pcre.h usability configure:10044: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 configure:10044: $? = 0 configure:10044: result: yes configure:10044: checking pcre.h presence configure:10044: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -E -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp configure:10044: $? = 0 configure:10044: result: yes configure:10044: checking for pcre.h configure:10044: result: yes configure:10073: checking for sqlite3_libversion in -lsqlite3 configure:10098: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -rdynamic conftest.cpp -lsqlite3 -latomic -ldl -lz -lpcre >&5 configure:10098: $? = 0 configure:10107: result: yes configure:10122: checking sqlite3.h usability configure:10122: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -c -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp >&5 configure:10122: $? = 0 configure:10122: result: yes configure:10122: checking sqlite3.h presence configure:10122: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -E -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 conftest.cpp configure:10122: $? = 0 configure:10122: result: yes configure:10122: checking for sqlite3.h configure:10122: result: yes configure:10521: checking pkg-config is at least version 0.9.0 configure:10524: result: yes configure:10702: checking for libpcap configure:10709: $PKG_CONFIG --exists --print-errors "libpcap" configure:10712: $? = 0 configure:10726: $PKG_CONFIG --exists --print-errors "libpcap" configure:10729: $? = 0 configure:10773: result: yes configure:10886: checking for protobuf configure:10893: $PKG_CONFIG --exists --print-errors "${PROTOBUF}" configure:10896: $? = 0 configure:10910: $PKG_CONFIG --exists --print-errors "${PROTOBUF}" configure:10913: $? = 0 configure:10971: result: yes configure:10990: checking for protoc configure:11006: found /home/buildroot/autobuild/instance-3/output-1/host/bin/protoc configure:11017: result: yes configure:11043: checking for libprotobufc configure:11050: $PKG_CONFIG --exists --print-errors "libprotobuf-c" configure:11053: $? = 0 configure:11067: $PKG_CONFIG --exists --print-errors "libprotobuf-c" configure:11070: $? = 0 configure:11108: result: yes configure:11183: checking for protoc-c configure:11199: found /home/buildroot/autobuild/instance-3/output-1/host/bin/protoc-c configure:11210: result: yes configure:11267: result: Using local radiotap headers configure:11309: checking for libnm configure:11316: $PKG_CONFIG --exists --print-errors "libnm" Package libnm was not found in the pkg-config search path. Perhaps you should add the directory containing `libnm.pc' to the PKG_CONFIG_PATH environment variable Package 'libnm', required by 'virtual:world', not found configure:11319: $? = 1 configure:11333: $PKG_CONFIG --exists --print-errors "libnm" Package libnm was not found in the pkg-config search path. Perhaps you should add the directory containing `libnm.pc' to the PKG_CONFIG_PATH environment variable Package 'libnm', required by 'virtual:world', not found configure:11336: $? = 1 configure:11350: result: no Package 'libnm', required by 'virtual:world', not found configure:11432: WARNING: Libnm missing device_set_managed function may be a very old version configure:11480: checking for libnl30 configure:11487: $PKG_CONFIG --exists --print-errors "libnl-3.0" configure:11490: $? = 0 configure:11504: $PKG_CONFIG --exists --print-errors "libnl-3.0" configure:11507: $? = 0 configure:11545: result: yes configure:11551: checking for libnlgenl30 configure:11558: $PKG_CONFIG --exists --print-errors "libnl-genl-3.0" configure:11561: $? = 0 configure:11575: $PKG_CONFIG --exists --print-errors "libnl-genl-3.0" configure:11578: $? = 0 configure:11616: result: yes configure:11622: checking for libnl20 configure:11629: $PKG_CONFIG --exists --print-errors "libnl-2.0" Package libnl-2.0 was not found in the pkg-config search path. Perhaps you should add the directory containing `libnl-2.0.pc' to the PKG_CONFIG_PATH environment variable Package 'libnl-2.0', required by 'virtual:world', not found configure:11632: $? = 1 configure:11646: $PKG_CONFIG --exists --print-errors "libnl-2.0" Package libnl-2.0 was not found in the pkg-config search path. Perhaps you should add the directory containing `libnl-2.0.pc' to the PKG_CONFIG_PATH environment variable Package 'libnl-2.0', required by 'virtual:world', not found configure:11649: $? = 1 configure:11663: result: no Package 'libnl-2.0', required by 'virtual:world', not found configure:11693: checking for libnl1 configure:11700: $PKG_CONFIG --exists --print-errors "libnl-1" Package libnl-1 was not found in the pkg-config search path. Perhaps you should add the directory containing `libnl-1.pc' to the PKG_CONFIG_PATH environment variable Package 'libnl-1', required by 'virtual:world', not found configure:11703: $? = 1 configure:11717: $PKG_CONFIG --exists --print-errors "libnl-1" Package libnl-1 was not found in the pkg-config search path. Perhaps you should add the directory containing `libnl-1.pc' to the PKG_CONFIG_PATH environment variable Package 'libnl-1', required by 'virtual:world', not found configure:11720: $? = 1 configure:11734: result: no Package 'libnl-1', required by 'virtual:world', not found configure:11846: checking For mac80211 support in netlink library configure:11874: /home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -o conftest -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -I/home/buildroot/autobuild/instance-3/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/include/libnl3 -rdynamic conftest.cpp -latomic -ldl -lz -lpcre -lsqlite3 -L/home/buildroot/autobuild/instance-3/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/lib -lnl-genl-3 -lnl-3 >&5 configure:11874: $? = 0 configure:11891: result: yes configure:12053: WARNING: missing libusb, ubertooth-one support will not be built configure:12207: WARNING: missing one or more required libraries for ubertooth-one configure:12630: creating ./config.status ## ---------------------- ## ## Running config.status. ## ## ---------------------- ## This file was extended by config.status, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = CONFIG_HEADERS = CONFIG_LINKS = CONFIG_COMMANDS = $ ./config.status on gcc159.bak.milne.osuosl.org config.status:957: creating Makefile config.status:957: creating Makefile.inc config.status:1060: WARNING: 'Makefile.inc.in' seems to ignore the --datarootdir setting config.status:957: creating packaging/kismet.pc config.status:957: creating packaging/systemd/kismet.service config.status:957: creating packaging/systemd/debug/kismet-debug.service config.status:957: creating capture_linux_bluetooth/Makefile config.status:957: creating capture_linux_wifi/Makefile config.status:957: creating capture_osx_corewlan_wifi/Makefile config.status:957: creating capture_sdr_rtl433/Makefile config.status:957: creating capture_sdr_rtlamr/Makefile config.status:957: creating capture_sdr_rtladsb/Makefile config.status:957: creating capture_freaklabs_zigbee/Makefile config.status:957: creating capture_nrf_mousejack/Makefile config.status:957: creating capture_ti_cc_2540/Makefile config.status:957: creating capture_ti_cc_2531/Makefile config.status:957: creating capture_ubertooth_one/Makefile config.status:957: creating capture_nrf_51822/Makefile config.status:957: creating capture_nxp_kw41z/Makefile config.status:957: creating config.h configure:13807: WARNING: unrecognized options: --disable-gtk-doc, --disable-gtk-doc-html, --disable-doc, --disable-docs, --disable-documentation, --with-xmlto, --with-fop, --disable-dependency-tracking, --enable-ipv6, --disable-nls, --disable-static, --enable-shared ## ---------------- ## ## Cache variables. ## ## ---------------- ## ac_cv_build=x86_64-pc-linux-gnu ac_cv_c_bigendian=no ac_cv_c_compiler_gnu=yes ac_cv_cxx_compiler_gnu=yes ac_cv_env_CCC_set= ac_cv_env_CCC_value= ac_cv_env_CC_set=set ac_cv_env_CC_value=/home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc ac_cv_env_CFLAGS_set=set ac_cv_env_CFLAGS_value='-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os ' ac_cv_env_CPPFLAGS_set=set ac_cv_env_CPPFLAGS_value='-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64' ac_cv_env_CPP_set=set ac_cv_env_CPP_value=/home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-cpp ac_cv_env_CXXCPP_set= ac_cv_env_CXXCPP_value= ac_cv_env_CXXFLAGS_set=set ac_cv_env_CXXFLAGS_value='-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os ' ac_cv_env_CXX_set=set ac_cv_env_CXX_value=/home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ ac_cv_env_LDFLAGS_set=set ac_cv_env_LDFLAGS_value= ac_cv_env_LIBS_set=set ac_cv_env_LIBS_value=-latomic ac_cv_env_PKG_CONFIG_LIBDIR_set= ac_cv_env_PKG_CONFIG_LIBDIR_value= ac_cv_env_PKG_CONFIG_PATH_set= ac_cv_env_PKG_CONFIG_PATH_value= ac_cv_env_PKG_CONFIG_set=set ac_cv_env_PKG_CONFIG_value=/home/buildroot/autobuild/instance-3/output-1/host/bin/pkg-config ac_cv_env_build_alias_set=set ac_cv_env_build_alias_value=x86_64-pc-linux-gnu ac_cv_env_host_alias_set=set ac_cv_env_host_alias_value=arm-buildroot-linux-gnueabi ac_cv_env_libnl1_CFLAGS_set= ac_cv_env_libnl1_CFLAGS_value= ac_cv_env_libnl1_LIBS_set= ac_cv_env_libnl1_LIBS_value= ac_cv_env_libnl20_CFLAGS_set= ac_cv_env_libnl20_CFLAGS_value= ac_cv_env_libnl20_LIBS_set= ac_cv_env_libnl20_LIBS_value= ac_cv_env_libnl30_CFLAGS_set= ac_cv_env_libnl30_CFLAGS_value= ac_cv_env_libnl30_LIBS_set= ac_cv_env_libnl30_LIBS_value= ac_cv_env_libnlgenl30_CFLAGS_set= ac_cv_env_libnlgenl30_CFLAGS_value= ac_cv_env_libnlgenl30_LIBS_set= ac_cv_env_libnlgenl30_LIBS_value= ac_cv_env_libnm_CFLAGS_set= ac_cv_env_libnm_CFLAGS_value= ac_cv_env_libnm_LIBS_set= ac_cv_env_libnm_LIBS_value= ac_cv_env_libpcap_CFLAGS_set= ac_cv_env_libpcap_CFLAGS_value= ac_cv_env_libpcap_LIBS_set= ac_cv_env_libpcap_LIBS_value= ac_cv_env_libprotobufc_CFLAGS_set= ac_cv_env_libprotobufc_CFLAGS_value= ac_cv_env_libprotobufc_LIBS_set= ac_cv_env_libprotobufc_LIBS_value= ac_cv_env_libusb_CFLAGS_set= ac_cv_env_libusb_CFLAGS_value= ac_cv_env_libusb_LIBS_set= ac_cv_env_libusb_LIBS_value= ac_cv_env_libwebsockets_CFLAGS_set= ac_cv_env_libwebsockets_CFLAGS_value= ac_cv_env_libwebsockets_LIBS_set= ac_cv_env_libwebsockets_LIBS_value= ac_cv_env_protobuf_CFLAGS_set= ac_cv_env_protobuf_CFLAGS_value= ac_cv_env_protobuf_LIBS_set= ac_cv_env_protobuf_LIBS_value= ac_cv_env_target_alias_set=set ac_cv_env_target_alias_value=arm-buildroot-linux-gnueabi ac_cv_func_calloc_0_nonnull=yes ac_cv_func_malloc_0_nonnull=yes ac_cv_func_memcmp_working=yes ac_cv_func_mmap_fixed_mapped=yes ac_cv_func_realloc_0_nonnull=yes ac_cv_func_setproctitle=no ac_cv_have_decl_malloc=yes ac_cv_header_inttypes_h=yes ac_cv_header_libutil_h=no ac_cv_header_linux_wireless_h=yes ac_cv_header_memory_h=yes ac_cv_header_pcre_h=yes ac_cv_header_sqlite3_h=yes ac_cv_header_stdc=yes ac_cv_header_stdint_h=yes ac_cv_header_stdlib_h=yes ac_cv_header_string_h=yes ac_cv_header_strings_h=yes ac_cv_header_sys_pstat_h=no ac_cv_header_sys_stat_h=yes ac_cv_header_sys_types_h=yes ac_cv_header_unistd_h=yes ac_cv_host=arm-buildroot-linux-gnueabi ac_cv_lbl_unaligned_fail=yes ac_cv_lib_dl_dlopen=yes ac_cv_lib_pcre_pcre_compile=yes ac_cv_lib_sqlite3_sqlite3_libversion=yes ac_cv_lib_stdcpp_main=yes ac_cv_lib_util_setproctitle=no ac_cv_lib_z_deflate=yes ac_cv_objext=o ac_cv_path_EGREP='/bin/grep -E' ac_cv_path_GREP=/bin/grep ac_cv_path_install='/usr/bin/install -c' ac_cv_prog_CC=/home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc ac_cv_prog_CPP=/home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-cpp ac_cv_prog_CXXCPP='/home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -E' ac_cv_prog_cc_c89= ac_cv_prog_cc_c99=-std=gnu99 ac_cv_prog_cc_g=yes ac_cv_prog_cc_stdc=-std=gnu99 ac_cv_prog_cxx_g=yes ac_cv_prog_make_make_set=yes ac_cv_prog_protoc=yes ac_cv_prog_protocc=yes ac_cv_sys_file_offset_bits=no ac_cv_sys_largefile_CC=no ax_cv_cxx_compile_cxx11__std_gnupp11=yes ax_cv_cxx_compile_cxx14__h_std_cpp14=no ax_cv_cxx_compile_cxx14__h_std_cpp1y=no ax_cv_cxx_compile_cxx14__std_cpp14=no ax_cv_cxx_compile_cxx14__std_cpp1y=no ax_cv_cxx_compile_cxx14__std_gnupp14=no ax_cv_cxx_compile_cxx14__std_gnupp1y=no ax_cv_cxx_compile_cxx14_pstd_cpp14=no ax_cv_cxx_compile_cxx14_pstd_cpp1y=no ax_cv_cxx_compile_cxx17__h_std_cpp17=no ax_cv_cxx_compile_cxx17__h_std_cpp1z=no ax_cv_cxx_compile_cxx17__std_cpp17=no ax_cv_cxx_compile_cxx17__std_cpp1z=no ax_cv_cxx_compile_cxx17__std_gnupp17=no ax_cv_cxx_compile_cxx17__std_gnupp1z=no ax_cv_cxx_compile_cxx17_pstd_cpp17=no ax_cv_cxx_compile_cxx17_pstd_cpp1z=no ax_cv_gcc_version=4.8.3 gl_cv_func_malloc_0_nonnull=yes lt_cv_sys_lib_search_path_spec= pf_cv_argv_type=writeable pf_cv_var_progname=yes pkg_cv_libnl30_CFLAGS='-I/home/buildroot/autobuild/instance-3/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/include/libnl3 ' pkg_cv_libnl30_LIBS='-L/home/buildroot/autobuild/instance-3/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/lib -lnl-3 ' pkg_cv_libnlgenl30_CFLAGS='-I/home/buildroot/autobuild/instance-3/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/include/libnl3 ' pkg_cv_libnlgenl30_LIBS='-L/home/buildroot/autobuild/instance-3/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/lib -lnl-genl-3 -lnl-3 ' pkg_cv_libpcap_CFLAGS= pkg_cv_libpcap_LIBS='-L/home/buildroot/autobuild/instance-3/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/lib -lpcap ' pkg_cv_libprotobufc_CFLAGS= pkg_cv_libprotobufc_LIBS='-L/home/buildroot/autobuild/instance-3/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/lib -lprotobuf-c ' pkg_cv_protobuf_CFLAGS='-pthread ' pkg_cv_protobuf_LIBS='-L/home/buildroot/autobuild/instance-3/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/lib -lprotobuf ' ## ----------------- ## ## Output variables. ## ## ----------------- ## ALLTARGETS='$(STD_ALL)' BASE_DIR='/usr' BIN_DIR='/usr/bin' BUILD_CAPTURE_FREAKLABS_ZIGBEE='0' BUILD_CAPTURE_HACKRF_SWEEP='0' BUILD_CAPTURE_KISMETDB='1' BUILD_CAPTURE_LINUX_BLUETOOTH='1' BUILD_CAPTURE_LINUX_WIFI='1' BUILD_CAPTURE_NRF_51822='1' BUILD_CAPTURE_NRF_MOUSEJACK='0' BUILD_CAPTURE_NXP_KW41Z='1' BUILD_CAPTURE_OSX_COREWLAN='0' BUILD_CAPTURE_PCAPFILE='1' BUILD_CAPTURE_SDR_RTL433='0' BUILD_CAPTURE_SDR_RTLADSB='0' BUILD_CAPTURE_SDR_RTLAMR='0' BUILD_CAPTURE_TI_CC_2531='0' BUILD_CAPTURE_TI_CC_2540='0' BUILD_CAPTURE_UBERTOOTH_ONE='0' BUILD_PYTHON_MODULES='0' CC='/home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-gcc -std=gnu99' CFLAGS='-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3' CONFFILE_DIR='/etc' CPP='/home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-cpp' CPPFLAGS='-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64' CXX='/home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11' CXXCPP='/home/buildroot/autobuild/instance-3/output-1/host/bin/arm-none-linux-gnueabi-g++ -std=gnu++11 -E' CXXFLAGS='-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -O3' CXXLIBS=' -lstdc++' DATASOURCE_BINS='$(CAPTURE_KISMETDB) $(CAPTURE_PCAPFILE) $(CAPTURE_LINUX_WIFI) $(CAPTURE_LINUX_BLUETOOTH) $(CAPTURE_NRF_51822) $(CAPTURE_NXP_KW41Z)' DATA_DIR='/usr/share' DEFS='-DHAVE_CONFIG_H' ECHO_C='' ECHO_N='-n' ECHO_T='' EGREP='/bin/grep -E' EXEEXT='' GCC_VERSION='4.8.3' GREP='/bin/grep' HAVE_CXX11='1' HAVE_CXX14='0' HAVE_CXX17='0' INSTALL_DATA='${INSTALL} -m 644' INSTALL_PROGRAM='${INSTALL}' INSTALL_SCRIPT='${INSTALL}' KSLIBS='' LDFLAGS=' -rdynamic' LIBBTBBCFLAGS='' LIBBTBBLIBS='' LIBMLIB='-lm' LIBOBJS='' LIBPRELUDE_CFLAGS='' LIBPRELUDE_CONFIG='' LIBPRELUDE_CONFIG_PREFIX='' LIBPRELUDE_LDFLAGS='' LIBPRELUDE_LIBS='' LIBPRELUDE_PREFIX='' LIBPRELUDE_PTHREAD_CFLAGS='' LIBS='-latomic -ldl -lz -lpcre -lsqlite3' LIBUBERTOOTHCFLAGS='' LIBUBERTOOTHLIBS='' LIBUSBCFLAGS='' LIBUSBLIBS='' LIBWSCFLAGS='' LIBWSLIBS='' LIB_DIR='/usr/lib' LOCALSTATE_DIR='/var' LTLIBOBJS='' NLCFLAGS='-I/home/buildroot/autobuild/instance-3/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/include/libnl3 ' NLLIBS='-L/home/buildroot/autobuild/instance-3/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/lib -lnl-genl-3 -lnl-3 ' NMCFLAGS='' NMLIBS='' OBJEXT='o' PACKAGE_BUGREPORT='' PACKAGE_NAME='' PACKAGE_STRING='' PACKAGE_TARNAME='' PACKAGE_URL='' PACKAGE_VERSION='' PATH_SEPARATOR=':' PCAPCFLAGS='' PCAPLIBS='-L/home/buildroot/autobuild/instance-3/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/lib -lpcap ' PKG_CONFIG='/home/buildroot/autobuild/instance-3/output-1/host/bin/pkg-config' PKG_CONFIG_LIBDIR='' PKG_CONFIG_PATH='' PLUGINLDFLAGS='' PROTOBUF_CPP_H_TARGET='$(PROTOBUF_CPP_H)' PROTOBUF_CPP_O_TARGET='$(PROTOBUF_CPP_O)' PROTOCBIN='protoc' PROTOCCBIN='protoc-c' PROTOCCFLAGS='' PROTOCFLAGS='-pthread ' PROTOCLIBS='-L/home/buildroot/autobuild/instance-3/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/lib -lprotobuf-c ' PROTOLIBS='-L/home/buildroot/autobuild/instance-3/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/lib -lprotobuf ' PTHREAD_CFLAGS='-pthread' PTHREAD_LIBS='-lpthread' PYTHON='python3' PYTHON_VERSION='3' SET_MAKE='' SHELL='/bin/bash' VERSION='2019-08-GIT' ac_ct_CC='' ac_ct_CXX='' bindir='${exec_prefix}/bin' build='x86_64-pc-linux-gnu' build_alias='x86_64-pc-linux-gnu' build_cpu='x86_64' build_os='linux-gnu' build_vendor='pc' caplibs='' datadir='${datarootdir}' datarootdir='${prefix}/share' docdir='${datarootdir}/doc/${PACKAGE}' dvidir='${docdir}' exec_prefix='/usr' host='arm-buildroot-linux-gnueabi' host_alias='arm-buildroot-linux-gnueabi' host_cpu='arm' host_os='linux-gnueabi' host_vendor='buildroot' htmldir='${docdir}' includedir='${prefix}/include' infodir='${datarootdir}/info' instgrp='root' libdir='${exec_prefix}/lib' libexecdir='${exec_prefix}/libexec' libnl1_CFLAGS='' libnl1_LIBS='' libnl20_CFLAGS='' libnl20_LIBS='' libnl30_CFLAGS='-I/home/buildroot/autobuild/instance-3/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/include/libnl3 ' libnl30_LIBS='-L/home/buildroot/autobuild/instance-3/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/lib -lnl-3 ' libnlgenl30_CFLAGS='-I/home/buildroot/autobuild/instance-3/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/include/libnl3 ' libnlgenl30_LIBS='-L/home/buildroot/autobuild/instance-3/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/lib -lnl-genl-3 -lnl-3 ' libnm_CFLAGS='' libnm_LIBS='' libpcap_CFLAGS='' libpcap_LIBS='-L/home/buildroot/autobuild/instance-3/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/lib -lpcap ' libprotobufc_CFLAGS='' libprotobufc_LIBS='-L/home/buildroot/autobuild/instance-3/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/lib -lprotobuf-c ' libusb_CFLAGS='' libusb_LIBS='' libwebsockets_CFLAGS='' libwebsockets_LIBS='' localedir='${datarootdir}/locale' localstatedir='/var' mandir='${datarootdir}/man' oldincludedir='/usr/include' pcap='yes' pdfdir='${docdir}' prefix='/usr' program_transform_name='s,x,x,' protobuf_CFLAGS='-pthread ' protobuf_LIBS='-L/home/buildroot/autobuild/instance-3/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/lib -lprotobuf ' protoc='yes' protocc='yes' psdir='${docdir}' sbindir='${exec_prefix}/sbin' sharedatadir='${prefix}/share' sharedstatedir='${prefix}/com' suidgroup='kismet' sysconfdir='/etc' target_alias='arm-buildroot-linux-gnueabi' ## ----------- ## ## confdefs.h. ## ## ----------- ## /* confdefs.h */ #define PACKAGE_NAME "" #define PACKAGE_TARNAME "" #define PACKAGE_VERSION "" #define PACKAGE_STRING "" #define PACKAGE_BUGREPORT "" #define PACKAGE_URL "" #define SYS_LINUX 1 #define GCC_VERSION_MAJOR 4 #define GCC_VERSION_MINOR 8 #define GCC_VERSION_PATCH 3 #define HAVE_CXX11 1 #define SYSCONF_LOC "/etc" #define LOCALSTATE_DIR "/var" #define BIN_LOC "/usr/bin" #define LIB_LOC "/usr/lib" #define DATA_LOC "/usr/share" #define STDC_HEADERS 1 #define HAVE_SYS_TYPES_H 1 #define HAVE_SYS_STAT_H 1 #define HAVE_STDLIB_H 1 #define HAVE_STRING_H 1 #define HAVE_MEMORY_H 1 #define HAVE_STRINGS_H 1 #define HAVE_INTTYPES_H 1 #define HAVE_STDINT_H 1 #define HAVE_UNISTD_H 1 #define DEBUG_MUTEX_NAME 1 #define TE_TYPE_SAFETY 1 #define DISABLE_BACKWARD 1 #define HAVE_STDINT_H 1 #define STRERROR_R_T char * #define HAVE_SOCKLEN_T 1 #define HAVE_PIPE2 1 #define HAVE___PROGNAME 1 #define PF_ARGV_TYPE PF_ARGV_WRITEABLE #define HAVE_LINUX_WIRELESS 1 #define HAVE_LINUX_IWFREQFLAG 1 #define HAVE_LIBPCRE 1 #define HAVE_LIBSQLITE3 1 #define HAVE_LIBPCAP 1 #define HAVE_LOCAL_RADIOTAP 1 #define HAVE_LIBNL 1 #define HAVE_LIBNL30 1 #define HAVE_LINUX_NETLINK 1 #define HAVE_GPS 1 configure: exit 0