1. GNAT needs GCC 5.1 or later 2. Ubuntu 16.04 uses GCC 5.4 3. The propose is bump to GCC 5.5 4. Debian 9 uses GCC 6.3 5. D need GCC 9.4 or later
GCC 9.4 is obviously too new, and using GCC 5.5 rules out Ubuntu 16.04. So unless there is a strong reason to do so, it is recommended to bump to GCC 5.4. On Thu, Sep 19, 2024 at 12:59 AM Jason Merrill <ja...@redhat.com> wrote: > > On 9/18/24 6:36 PM, Iain Sandoe wrote: > > > > > >> On 18 Sep 2024, at 17:18, Jason Merrill <ja...@redhat.com> wrote: > >> > >> Tested x86_64-pc-linux-gnu with 5.5.0 bootstrap compiler. Thoughts? > > > > Despite that adequate support is available in GCC-5.5/6, would it be > > useful to jump to a version that allows a single toolchain to bootstrap > > all the currently supported languages (currently we have 4.8.x for the > > c-family+fortran, 5 for Ada and 9 for D which is somewhat unhelpful > > for folks who test all supported langs). > > Hmm, people are certainly encouraged to bootstrap with GCC 9 if they > want D support, but I wouldn't list it as a requirement for building GCC > at all. The cost of unnecessarily cutting off older installations seems > to me a poor tradeoff. > > >> -- 8< -- > >> > >> This implements my proposal to update our bootstrap requirement to C++14. > >> The big benefit of the change is the greater constexpr power, but C++14 > >> also > >> added variable templates, generic lambdas, lambda init-capture, binary > >> literals, and numeric literal digit separators. > >> > >> I'm not sure which GCC version to mention here. C++14 was feature-complete > >> in GCC 5, and became the default in GCC 6. 5.5.0 builds trunk with no > >> trouble, but of course trunk also doesn't use any C++14 features. Looking > >> at bugzilla, I see only one C++14 fix (PR71630) in 5.5, and it doesn't seem > >> important. In 5.4, PR69995 seems potentially significant, so shall we > >> recommend 5.4 or later? Or just say 5.5 because people are unlikely to be > >> stuck on an earlier minor release? > >> > >> gcc/ChangeLog: > >> > >> * doc/install.texi (Prerequisites): Update to C++14. > >> > >> ChangeLog: > >> > >> * configure.ac: Update requirement to C++14. > >> * configure: Regenerate. > >> --- > >> gcc/doc/install.texi | 15 +- > >> configure.ac | 12 +- > >> configure | 832 ++++++++++++++++++++++++++++++++++++++++--- > >> 3 files changed, 790 insertions(+), 69 deletions(-) > >> > >> diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi > >> index e339d736969..87add0b6572 100644 > >> --- a/gcc/doc/install.texi > >> +++ b/gcc/doc/install.texi > >> @@ -222,17 +222,18 @@ described below. > >> > >> @heading Tools/packages necessary for building GCC > >> @table @asis > >> -@item ISO C++11 compiler > >> -Necessary to bootstrap GCC. GCC 4.8.3 or newer has sufficient > >> -support for used C++11 features. > >> +@item ISO C++14 compiler > >> +Necessary to bootstrap GCC. GCC 5.5 or newer has sufficient > >> +support for used C++14 features. > >> > >> -Versions of GCC prior to 11 also allow bootstrapping with an ISO C++98 > >> -compiler, and versions of GCC prior to 4.8 also allow bootstrapping with > >> -an ISO C89 compiler. > >> +Versions of GCC prior to 15 allow bootstrapping with an ISO C++11 > >> +compiler, versions prior to 11 allow bootstrapping with an ISO C++98 > >> +compiler, and versions prior to 4.8 allow bootstrapping with an ISO > >> +C89 compiler. > >> > >> To build all languages in a cross-compiler or other configuration where > >> 3-stage bootstrap is not performed, you need to start with an existing > >> -GCC binary (version 4.8.3 or later) because source code for language > >> +GCC binary (version 5.5 or later) because source code for language > >> frontends other than C might use GCC extensions. > >> > >> @item C standard library and headers > >> diff --git a/configure.ac b/configure.ac > >> index f61dbe64a94..91635d5368a 100644 > >> --- a/configure.ac > >> +++ b/configure.ac > >> @@ -1457,16 +1457,16 @@ case > >> "$have_compiler:$host:$target:$enable_bootstrap" in > >> ;; > >> esac > >> > >> -# When bootstrapping with GCC, build stage 1 in C++11 mode to ensure that > >> a > >> -# C++11 compiler can still start the bootstrap. Otherwise, if building > >> GCC, > >> -# require C++11 (or higher). > >> +# When bootstrapping with GCC, build stage 1 in C++14 mode to ensure that > >> a > >> +# C++14 compiler can still start the bootstrap. Otherwise, if building > >> GCC, > >> +# require C++14 (or higher). > >> if test "$enable_bootstrap:$GXX" = "yes:yes"; then > >> - CXX="$CXX -std=c++11" > >> + CXX="$CXX -std=c++14" > >> elif test "$have_compiler" = yes; then > >> - AX_CXX_COMPILE_STDCXX(11) > >> + AX_CXX_COMPILE_STDCXX(14) > >> > >> if test "${build}" != "${host}"; then > >> - AX_CXX_COMPILE_STDCXX(11, [], [], [_FOR_BUILD]) > >> + AX_CXX_COMPILE_STDCXX(14, [], [], [_FOR_BUILD]) > >> fi > >> fi > >> > >> diff --git a/configure b/configure > >> index e9583f2ba0c..ab9719c6e93 100755 > >> --- a/configure > >> +++ b/configure > >> @@ -712,8 +712,8 @@ gmplibs > >> PGO_BUILD_LTO_CFLAGS > >> PGO_BUILD_USE_CFLAGS > >> PGO_BUILD_GEN_CFLAGS > >> -HAVE_CXX11_FOR_BUILD > >> -HAVE_CXX11 > >> +HAVE_CXX14_FOR_BUILD > >> +HAVE_CXX14 > >> do_compare > >> CARGO > >> GDC > >> @@ -5914,13 +5914,13 @@ $as_echo "$as_me: WARNING: trying to bootstrap a > >> cross compiler" >&2;} > >> ;; > >> esac > >> > >> -# When bootstrapping with GCC, build stage 1 in C++11 mode to ensure that > >> a > >> -# C++11 compiler can still start the bootstrap. Otherwise, if building > >> GCC, > >> -# require C++11 (or higher). > >> +# When bootstrapping with GCC, build stage 1 in C++14 mode to ensure that > >> a > >> +# C++14 compiler can still start the bootstrap. Otherwise, if building > >> GCC, > >> +# require C++14 (or higher). > >> if test "$enable_bootstrap:$GXX" = "yes:yes"; then > >> - CXX="$CXX -std=c++11" > >> + CXX="$CXX -std=c++14" > >> elif test "$have_compiler" = yes; then > >> - ax_cxx_compile_alternatives="11 0x" > >> ax_cxx_compile_cxx11_required=true > >> + ax_cxx_compile_alternatives="14 1y" > >> ax_cxx_compile_cxx14_required=true > >> ac_ext=cpp > >> ac_cpp='$CXXCPP $CPPFLAGS' > >> ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' > >> @@ -5928,9 +5928,9 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS > >> $CPPFLAGS $LDFLAGS conftest.$ac_ex > >> ac_compiler_gnu=$ac_cv_cxx_compiler_gnu > >> ac_success=no > >> > >> - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX > >> supports C++11 features by default" >&5 > >> -$as_echo_n "checking whether $CXX supports C++11 features by default... " > >> >&6; } > >> -if ${ax_cv_cxx_compile_cxx11+:} false; then : > >> + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX > >> supports C++14 features by default" >&5 > >> +$as_echo_n "checking whether $CXX supports C++14 features by default... " > >> >&6; } > >> +if ${ax_cv_cxx_compile_cxx14+:} false; then : > >> $as_echo_n "(cached) " >&6 > >> else > >> cat confdefs.h - <<_ACEOF >conftest.$ac_ext > >> @@ -6223,26 +6223,146 @@ namespace cxx11 > >> > >> > >> > >> + > >> +// 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<T, T> > >> + { > >> + static constexpr auto value = true; > >> + }; > >> + > >> + int > >> + test() > >> + { > >> + auto x = 0; > >> + static_assert(is_same<int, decltype(f(x))>::value, ""); > >> + static_assert(is_same<int&, decltype(g(x))>::value, ""); > >> + return x; > >> + } > >> + > >> + } > >> + > >> +} // namespace cxx14 > >> + > >> +#endif // __cplusplus >= 201402L > >> + > >> + > >> + > >> _ACEOF > >> if ac_fn_cxx_try_compile "$LINENO"; then : > >> - ax_cv_cxx_compile_cxx11=yes > >> + ax_cv_cxx_compile_cxx14=yes > >> else > >> - ax_cv_cxx_compile_cxx11=no > >> + ax_cv_cxx_compile_cxx14=no > >> fi > >> rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext > >> fi > >> -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: > >> $ax_cv_cxx_compile_cxx11" >&5 > >> -$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } > >> - if test x$ax_cv_cxx_compile_cxx11 = xyes; then > >> +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: > >> $ax_cv_cxx_compile_cxx14" >&5 > >> +$as_echo "$ax_cv_cxx_compile_cxx14" >&6; } > >> + if test x$ax_cv_cxx_compile_cxx14 = xyes; then > >> ac_success=yes > >> fi > >> > >> if test x$ac_success = xno; then > >> for alternative in ${ax_cxx_compile_alternatives}; do > >> switch="-std=gnu++${alternative}" > >> - cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` > >> - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX > >> supports C++11 features with $switch" >&5 > >> -$as_echo_n "checking whether $CXX supports C++11 features with $switch... > >> " >&6; } > >> + cachevar=`$as_echo "ax_cv_cxx_compile_cxx14_$switch" | $as_tr_sh` > >> + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX > >> supports C++14 features with $switch" >&5 > >> +$as_echo_n "checking whether $CXX supports C++14 features with $switch... > >> " >&6; } > >> if eval \${$cachevar+:} false; then : > >> $as_echo_n "(cached) " >&6 > >> else > >> @@ -6538,6 +6658,126 @@ namespace cxx11 > >> > >> > >> > >> + > >> +// 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<T, T> > >> + { > >> + static constexpr auto value = true; > >> + }; > >> + > >> + int > >> + test() > >> + { > >> + auto x = 0; > >> + static_assert(is_same<int, decltype(f(x))>::value, ""); > >> + static_assert(is_same<int&, decltype(g(x))>::value, ""); > >> + return x; > >> + } > >> + > >> + } > >> + > >> +} // namespace cxx14 > >> + > >> +#endif // __cplusplus >= 201402L > >> + > >> + > >> + > >> _ACEOF > >> if ac_fn_cxx_try_compile "$LINENO"; then : > >> eval $cachevar=yes > >> @@ -6564,9 +6804,9 @@ $as_echo "$ac_res" >&6; } > >> if test x$ac_success = xno; then > >> for alternative in ${ax_cxx_compile_alternatives}; do > >> for switch in -std=c++${alternative} +std=c++${alternative} "-h > >> std=c++${alternative}"; do > >> - cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` > >> - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX > >> supports C++11 features with $switch" >&5 > >> -$as_echo_n "checking whether $CXX supports C++11 features with $switch... > >> " >&6; } > >> + cachevar=`$as_echo "ax_cv_cxx_compile_cxx14_$switch" | $as_tr_sh` > >> + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX > >> supports C++14 features with $switch" >&5 > >> +$as_echo_n "checking whether $CXX supports C++14 features with $switch... > >> " >&6; } > >> if eval \${$cachevar+:} false; then : > >> $as_echo_n "(cached) " >&6 > >> else > >> @@ -6862,6 +7102,126 @@ namespace cxx11 > >> > >> > >> > >> + > >> +// 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<T, T> > >> + { > >> + static constexpr auto value = true; > >> + }; > >> + > >> + int > >> + test() > >> + { > >> + auto x = 0; > >> + static_assert(is_same<int, decltype(f(x))>::value, ""); > >> + static_assert(is_same<int&, decltype(g(x))>::value, ""); > >> + return x; > >> + } > >> + > >> + } > >> + > >> +} // namespace cxx14 > >> + > >> +#endif // __cplusplus >= 201402L > >> + > >> + > >> + > >> _ACEOF > >> if ac_fn_cxx_try_compile "$LINENO"; then : > >> eval $cachevar=yes > >> @@ -6895,41 +7255,41 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS > >> conftest.$ac_ext >&5' > >> ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS > >> conftest.$ac_ext $LIBS >&5' > >> ac_compiler_gnu=$ac_cv_c_compiler_gnu > >> > >> - if test x$ax_cxx_compile_cxx11_required = xtrue; then > >> + if test x$ax_cxx_compile_cxx14_required = xtrue; then > >> if test x$ac_success = xno; then > >> - as_fn_error $? "*** A compiler with support for C++11 language > >> features is required." "$LINENO" 5 > >> + as_fn_error $? "*** A compiler with support for C++14 language > >> features is required." "$LINENO" 5 > >> fi > >> fi > >> if test x$ac_success = xno; then > >> - HAVE_CXX11=0 > >> - { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 > >> support was found" >&5 > >> -$as_echo "$as_me: No compiler with C++11 support was found" >&6;} > >> + HAVE_CXX14=0 > >> + { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++14 > >> support was found" >&5 > >> +$as_echo "$as_me: No compiler with C++14 support was found" >&6;} > >> else > >> - HAVE_CXX11=1 > >> + HAVE_CXX14=1 > >> > >> -$as_echo "#define HAVE_CXX11 1" >>confdefs.h > >> +$as_echo "#define HAVE_CXX14 1" >>confdefs.h > >> > >> fi > >> > >> > >> > >> if test "${build}" != "${host}"; then > >> - ax_cxx_compile_alternatives="11 0x" > >> ax_cxx_compile_cxx11_required=true > >> + ax_cxx_compile_alternatives="14 1y" > >> ax_cxx_compile_cxx14_required=true > >> ac_ext=cpp > >> ac_cpp='$CXXCPP $CPPFLAGS' > >> ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' > >> ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS > >> conftest.$ac_ext $LIBS >&5' > >> ac_compiler_gnu=$ac_cv_cxx_compiler_gnu > >> ac_success=no > >> - ax_cv_cxx_compile_cxx11_orig_cxx="$CXX" > >> - ax_cv_cxx_compile_cxx11_orig_cxxflags="$CXXFLAGS" > >> - ax_cv_cxx_compile_cxx11_orig_cppflags="$CPPFLAGS" > >> + ax_cv_cxx_compile_cxx14_orig_cxx="$CXX" > >> + ax_cv_cxx_compile_cxx14_orig_cxxflags="$CXXFLAGS" > >> + ax_cv_cxx_compile_cxx14_orig_cppflags="$CPPFLAGS" > >> CXX="$CXX_FOR_BUILD" > >> CXXFLAGS="$CXXFLAGS_FOR_BUILD" > >> CPPFLAGS="$CPPFLAGS_FOR_BUILD" > >> - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX > >> supports C++11 features by default" >&5 > >> -$as_echo_n "checking whether $CXX supports C++11 features by default... " > >> >&6; } > >> -if ${ax_cv_cxx_compile_cxx11_FOR_BUILD+:} false; then : > >> + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX > >> supports C++14 features by default" >&5 > >> +$as_echo_n "checking whether $CXX supports C++14 features by default... " > >> >&6; } > >> +if ${ax_cv_cxx_compile_cxx14_FOR_BUILD+:} false; then : > >> $as_echo_n "(cached) " >&6 > >> else > >> cat confdefs.h - <<_ACEOF >conftest.$ac_ext > >> @@ -7222,26 +7582,146 @@ namespace cxx11 > >> > >> > >> > >> + > >> +// 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<T, T> > >> + { > >> + static constexpr auto value = true; > >> + }; > >> + > >> + int > >> + test() > >> + { > >> + auto x = 0; > >> + static_assert(is_same<int, decltype(f(x))>::value, ""); > >> + static_assert(is_same<int&, decltype(g(x))>::value, ""); > >> + return x; > >> + } > >> + > >> + } > >> + > >> +} // namespace cxx14 > >> + > >> +#endif // __cplusplus >= 201402L > >> + > >> + > >> + > >> _ACEOF > >> if ac_fn_cxx_try_compile "$LINENO"; then : > >> - ax_cv_cxx_compile_cxx11_FOR_BUILD=yes > >> + ax_cv_cxx_compile_cxx14_FOR_BUILD=yes > >> else > >> - ax_cv_cxx_compile_cxx11_FOR_BUILD=no > >> + ax_cv_cxx_compile_cxx14_FOR_BUILD=no > >> fi > >> rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext > >> fi > >> -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: > >> $ax_cv_cxx_compile_cxx11_FOR_BUILD" >&5 > >> -$as_echo "$ax_cv_cxx_compile_cxx11_FOR_BUILD" >&6; } > >> - if test x$ax_cv_cxx_compile_cxx11_FOR_BUILD = xyes; then > >> +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: > >> $ax_cv_cxx_compile_cxx14_FOR_BUILD" >&5 > >> +$as_echo "$ax_cv_cxx_compile_cxx14_FOR_BUILD" >&6; } > >> + if test x$ax_cv_cxx_compile_cxx14_FOR_BUILD = xyes; then > >> ac_success=yes > >> fi > >> > >> if test x$ac_success = xno; then > >> for alternative in ${ax_cxx_compile_alternatives}; do > >> switch="-std=gnu++${alternative}" > >> - cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_FOR_BUILD_$switch" | > >> $as_tr_sh` > >> - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX > >> supports C++11 features with $switch" >&5 > >> -$as_echo_n "checking whether $CXX supports C++11 features with $switch... > >> " >&6; } > >> + cachevar=`$as_echo "ax_cv_cxx_compile_cxx14_FOR_BUILD_$switch" | > >> $as_tr_sh` > >> + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX > >> supports C++14 features with $switch" >&5 > >> +$as_echo_n "checking whether $CXX supports C++14 features with $switch... > >> " >&6; } > >> if eval \${$cachevar+:} false; then : > >> $as_echo_n "(cached) " >&6 > >> else > >> @@ -7537,6 +8017,126 @@ namespace cxx11 > >> > >> > >> > >> + > >> +// 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<T, T> > >> + { > >> + static constexpr auto value = true; > >> + }; > >> + > >> + int > >> + test() > >> + { > >> + auto x = 0; > >> + static_assert(is_same<int, decltype(f(x))>::value, ""); > >> + static_assert(is_same<int&, decltype(g(x))>::value, ""); > >> + return x; > >> + } > >> + > >> + } > >> + > >> +} // namespace cxx14 > >> + > >> +#endif // __cplusplus >= 201402L > >> + > >> + > >> + > >> _ACEOF > >> if ac_fn_cxx_try_compile "$LINENO"; then : > >> eval $cachevar=yes > >> @@ -7563,9 +8163,9 @@ $as_echo "$ac_res" >&6; } > >> if test x$ac_success = xno; then > >> for alternative in ${ax_cxx_compile_alternatives}; do > >> for switch in -std=c++${alternative} +std=c++${alternative} "-h > >> std=c++${alternative}"; do > >> - cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_FOR_BUILD_$switch" | > >> $as_tr_sh` > >> - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX > >> supports C++11 features with $switch" >&5 > >> -$as_echo_n "checking whether $CXX supports C++11 features with $switch... > >> " >&6; } > >> + cachevar=`$as_echo "ax_cv_cxx_compile_cxx14_FOR_BUILD_$switch" | > >> $as_tr_sh` > >> + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX > >> supports C++14 features with $switch" >&5 > >> +$as_echo_n "checking whether $CXX supports C++14 features with $switch... > >> " >&6; } > >> if eval \${$cachevar+:} false; then : > >> $as_echo_n "(cached) " >&6 > >> else > >> @@ -7861,6 +8461,126 @@ namespace cxx11 > >> > >> > >> > >> + > >> +// 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<T, T> > >> + { > >> + static constexpr auto value = true; > >> + }; > >> + > >> + int > >> + test() > >> + { > >> + auto x = 0; > >> + static_assert(is_same<int, decltype(f(x))>::value, ""); > >> + static_assert(is_same<int&, decltype(g(x))>::value, ""); > >> + return x; > >> + } > >> + > >> + } > >> + > >> +} // namespace cxx14 > >> + > >> +#endif // __cplusplus >= 201402L > >> + > >> + > >> + > >> _ACEOF > >> if ac_fn_cxx_try_compile "$LINENO"; then : > >> eval $cachevar=yes > >> @@ -7890,28 +8610,28 @@ $as_echo "$ac_res" >&6; } > >> CXX_FOR_BUILD="$CXX" > >> CXXFLAGS_FOR_BUILD="$CXXFLAGS" > >> CPPFLAGS_FOR_BUILD="$CPPFLAGS" > >> - CXX="$ax_cv_cxx_compile_cxx11_orig_cxx" > >> - CXXFLAGS="$ax_cv_cxx_compile_cxx11_orig_cxxflags" > >> - CPPFLAGS="$ax_cv_cxx_compile_cxx11_orig_cppflags" > >> + CXX="$ax_cv_cxx_compile_cxx14_orig_cxx" > >> + CXXFLAGS="$ax_cv_cxx_compile_cxx14_orig_cxxflags" > >> + CPPFLAGS="$ax_cv_cxx_compile_cxx14_orig_cppflags" > >> ac_ext=c > >> ac_cpp='$CPP $CPPFLAGS' > >> ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' > >> ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS > >> conftest.$ac_ext $LIBS >&5' > >> ac_compiler_gnu=$ac_cv_c_compiler_gnu > >> > >> - if test x$ax_cxx_compile_cxx11_required = xtrue; then > >> + if test x$ax_cxx_compile_cxx14_required = xtrue; then > >> if test x$ac_success = xno; then > >> - as_fn_error $? "*** A compiler with support for C++11 language > >> features is required." "$LINENO" 5 > >> + as_fn_error $? "*** A compiler with support for C++14 language > >> features is required." "$LINENO" 5 > >> fi > >> fi > >> if test x$ac_success = xno; then > >> - HAVE_CXX11_FOR_BUILD=0 > >> - { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 > >> support was found" >&5 > >> -$as_echo "$as_me: No compiler with C++11 support was found" >&6;} > >> + HAVE_CXX14_FOR_BUILD=0 > >> + { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++14 > >> support was found" >&5 > >> +$as_echo "$as_me: No compiler with C++14 support was found" >&6;} > >> else > >> - HAVE_CXX11_FOR_BUILD=1 > >> + HAVE_CXX14_FOR_BUILD=1 > >> > >> -$as_echo "#define HAVE_CXX11_FOR_BUILD 1" >>confdefs.h > >> +$as_echo "#define HAVE_CXX14_FOR_BUILD 1" >>confdefs.h > >> > >> fi > >> > >> > >> base-commit: 5c8f9f4d4cebabf85e68c5bdbe2d4ee6646edc7c > >> -- > >> 2.46.0 > >> > > >