mirror of
				https://github.com/cookiengineer/audacity
				synced 2025-10-31 14:13:50 +01:00 
			
		
		
		
	Get Nyquist Workbench building again
This commit is contained in:
		| @@ -1,7 +1,7 @@ | ||||
| # Makefile.in generated by automake 1.14.1 from Makefile.am. | ||||
| # Makefile.in generated by automake 1.15 from Makefile.am. | ||||
| # @configure_input@ | ||||
|  | ||||
| # Copyright (C) 1994-2013 Free Software Foundation, Inc. | ||||
| # Copyright (C) 1994-2014 Free Software Foundation, Inc. | ||||
|  | ||||
| # This Makefile.in is free software; the Free Software Foundation | ||||
| # gives unlimited permission to copy and/or distribute it, | ||||
| @@ -15,7 +15,17 @@ | ||||
| @SET_MAKE@ | ||||
|  | ||||
| VPATH = @srcdir@ | ||||
| am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' | ||||
| am__is_gnu_make = { \ | ||||
|   if test -z '$(MAKELEVEL)'; then \ | ||||
|     false; \ | ||||
|   elif test -n '$(MAKE_HOST)'; then \ | ||||
|     true; \ | ||||
|   elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ | ||||
|     true; \ | ||||
|   else \ | ||||
|     false; \ | ||||
|   fi; \ | ||||
| } | ||||
| am__make_running_with_option = \ | ||||
|   case $${target_option-} in \ | ||||
|       ?) ;; \ | ||||
| @@ -79,25 +89,15 @@ POST_UNINSTALL = : | ||||
| build_triplet = @build@ | ||||
| host_triplet = @host@ | ||||
| subdir = . | ||||
| DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ | ||||
| 	$(top_srcdir)/configure $(am__configure_deps) \ | ||||
| 	$(top_srcdir)/autotools/depcomp autotools/ar-lib \ | ||||
| 	autotools/compile autotools/config.guess autotools/config.sub \ | ||||
| 	autotools/depcomp autotools/install-sh autotools/missing \ | ||||
| 	autotools/ltmain.sh $(top_srcdir)/autotools/ar-lib \ | ||||
| 	$(top_srcdir)/autotools/compile \ | ||||
| 	$(top_srcdir)/autotools/config.guess \ | ||||
| 	$(top_srcdir)/autotools/config.sub \ | ||||
| 	$(top_srcdir)/autotools/install-sh \ | ||||
| 	$(top_srcdir)/autotools/ltmain.sh \ | ||||
| 	$(top_srcdir)/autotools/missing | ||||
| ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | ||||
| am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ | ||||
| 	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ | ||||
| 	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ | ||||
| 	$(top_srcdir)/configure.ac | ||||
| am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ | ||||
| 	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ | ||||
| 	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ | ||||
| 	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac | ||||
| am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | ||||
| 	$(ACLOCAL_M4) | ||||
| DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ | ||||
| 	$(am__configure_deps) $(am__DIST_COMMON) | ||||
| am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ | ||||
|  configure.lineno config.status.lineno | ||||
| mkinstalldirs = $(install_sh) -d | ||||
| @@ -224,6 +224,17 @@ ETAGS = etags | ||||
| CTAGS = ctags | ||||
| CSCOPE = cscope | ||||
| AM_RECURSIVE_TARGETS = cscope | ||||
| am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/autotools/ar-lib \ | ||||
| 	$(top_srcdir)/autotools/compile \ | ||||
| 	$(top_srcdir)/autotools/config.guess \ | ||||
| 	$(top_srcdir)/autotools/config.sub \ | ||||
| 	$(top_srcdir)/autotools/depcomp \ | ||||
| 	$(top_srcdir)/autotools/install-sh \ | ||||
| 	$(top_srcdir)/autotools/ltmain.sh \ | ||||
| 	$(top_srcdir)/autotools/missing autotools/ar-lib \ | ||||
| 	autotools/compile autotools/config.guess autotools/config.sub \ | ||||
| 	autotools/depcomp autotools/install-sh autotools/ltmain.sh \ | ||||
| 	autotools/missing | ||||
| DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) | ||||
| distdir = $(PACKAGE)-$(VERSION) | ||||
| top_distdir = $(distdir) | ||||
| @@ -271,6 +282,7 @@ EGREP = @EGREP@ | ||||
| EXEEXT = @EXEEXT@ | ||||
| FGREP = @FGREP@ | ||||
| GREP = @GREP@ | ||||
| HAVE_CXX11 = @HAVE_CXX11@ | ||||
| INSTALL = @INSTALL@ | ||||
| INSTALL_DATA = @INSTALL_DATA@ | ||||
| INSTALL_PROGRAM = @INSTALL_PROGRAM@ | ||||
| @@ -391,7 +403,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi | ||||
| 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ | ||||
| 	$(am__cd) $(top_srcdir) && \ | ||||
| 	  $(AUTOMAKE) --foreign Makefile | ||||
| .PRECIOUS: Makefile | ||||
| Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status | ||||
| 	@case '$?' in \ | ||||
| 	  *config.status*) \ | ||||
| @@ -611,15 +622,15 @@ dist-xz: distdir | ||||
| 	$(am__post_remove_distdir) | ||||
|  | ||||
| dist-tarZ: distdir | ||||
| 	@echo WARNING: "Support for shar distribution archives is" \ | ||||
| 	               "deprecated." >&2 | ||||
| 	@echo WARNING: "Support for distribution archives compressed with" \ | ||||
| 		       "legacy program 'compress' is deprecated." >&2 | ||||
| 	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2 | ||||
| 	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z | ||||
| 	$(am__post_remove_distdir) | ||||
|  | ||||
| dist-shar: distdir | ||||
| 	@echo WARNING: "Support for distribution archives compressed with" \ | ||||
| 		       "legacy program 'compress' is deprecated." >&2 | ||||
| 	@echo WARNING: "Support for shar distribution archives is" \ | ||||
| 	               "deprecated." >&2 | ||||
| 	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2 | ||||
| 	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz | ||||
| 	$(am__post_remove_distdir) | ||||
| @@ -655,17 +666,17 @@ distcheck: dist | ||||
| 	esac | ||||
| 	chmod -R a-w $(distdir) | ||||
| 	chmod u+w $(distdir) | ||||
| 	mkdir $(distdir)/_build $(distdir)/_inst | ||||
| 	mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst | ||||
| 	chmod a-w $(distdir) | ||||
| 	test -d $(distdir)/_build || exit 0; \ | ||||
| 	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ | ||||
| 	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ | ||||
| 	  && am__cwd=`pwd` \ | ||||
| 	  && $(am__cd) $(distdir)/_build \ | ||||
| 	  && ../configure \ | ||||
| 	  && $(am__cd) $(distdir)/_build/sub \ | ||||
| 	  && ../../configure \ | ||||
| 	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \ | ||||
| 	    $(DISTCHECK_CONFIGURE_FLAGS) \ | ||||
| 	    --srcdir=.. --prefix="$$dc_install_base" \ | ||||
| 	    --srcdir=../.. --prefix="$$dc_install_base" \ | ||||
| 	  && $(MAKE) $(AM_MAKEFLAGS) \ | ||||
| 	  && $(MAKE) $(AM_MAKEFLAGS) dvi \ | ||||
| 	  && $(MAKE) $(AM_MAKEFLAGS) check \ | ||||
| @@ -849,6 +860,8 @@ uninstall-am: uninstall-pkglibLTLIBRARIES | ||||
| 	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ | ||||
| 	uninstall-am uninstall-pkglibLTLIBRARIES | ||||
|  | ||||
| .PRECIOUS: Makefile | ||||
|  | ||||
| 	$(NULL) | ||||
|  | ||||
| # Tell versions [3.59,3.63) of GNU make to not export all variables. | ||||
|   | ||||
							
								
								
									
										2518
									
								
								lib-src/mod-nyq-bench/configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2518
									
								
								lib-src/mod-nyq-bench/configure
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -6,6 +6,7 @@ AC_PREREQ([2.59]) | ||||
| AC_INIT([mod-nyq-bench],[1.0],[feedback@audacityteam.org],[mod-nyq-bench]) | ||||
| AC_CONFIG_AUX_DIR([autotools]) | ||||
| AC_CONFIG_MACRO_DIR([m4]) | ||||
| AX_CXX_COMPILE_STDCXX(11) | ||||
|  | ||||
| AM_INIT_AUTOMAKE([1.11 dist-xz foreign no-dist-gzip subdir-objects -Wall]) | ||||
| AM_MAINTAINER_MODE([disable]) | ||||
|   | ||||
							
								
								
									
										562
									
								
								lib-src/mod-nyq-bench/m4/ax_cxx_compile_stdcxx.m4
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										562
									
								
								lib-src/mod-nyq-bench/m4/ax_cxx_compile_stdcxx.m4
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,562 @@ | ||||
| # =========================================================================== | ||||
| #   http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html | ||||
| # =========================================================================== | ||||
| # | ||||
| # SYNOPSIS | ||||
| # | ||||
| #   AX_CXX_COMPILE_STDCXX(VERSION, [ext|noext], [mandatory|optional]) | ||||
| # | ||||
| # DESCRIPTION | ||||
| # | ||||
| #   Check for baseline language coverage in the compiler for the specified | ||||
| #   version of the C++ standard.  If necessary, add switches to CXX and | ||||
| #   CXXCPP to enable support.  VERSION may be '11' (for the C++11 standard) | ||||
| #   or '14' (for the C++14 standard). | ||||
| # | ||||
| #   The second argument, if specified, indicates whether you insist on an | ||||
| #   extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g. | ||||
| #   -std=c++11).  If neither is specified, you get whatever works, with | ||||
| #   preference for an extended mode. | ||||
| # | ||||
| #   The third argument, if specified 'mandatory' or if left unspecified, | ||||
| #   indicates that baseline support for the specified C++ standard is | ||||
| #   required and that the macro should error out if no mode with that | ||||
| #   support is found.  If specified 'optional', then configuration proceeds | ||||
| #   regardless, after defining HAVE_CXX${VERSION} if and only if a | ||||
| #   supporting mode is found. | ||||
| # | ||||
| # LICENSE | ||||
| # | ||||
| #   Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com> | ||||
| #   Copyright (c) 2012 Zack Weinberg <zackw@panix.com> | ||||
| #   Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu> | ||||
| #   Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com> | ||||
| #   Copyright (c) 2015 Paul Norman <penorman@mac.com> | ||||
| #   Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu> | ||||
| # | ||||
| #   Copying and distribution of this file, with or without modification, are | ||||
| #   permitted in any medium without royalty provided the copyright notice | ||||
| #   and this notice are preserved.  This file is offered as-is, without any | ||||
| #   warranty. | ||||
|  | ||||
| #serial 4 | ||||
|  | ||||
| dnl  This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro | ||||
| dnl  (serial version number 13). | ||||
|  | ||||
| AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl | ||||
|   m4_if([$1], [11], [], | ||||
|         [$1], [14], [], | ||||
|         [$1], [17], [m4_fatal([support for C++17 not yet implemented in AX_CXX_COMPILE_STDCXX])], | ||||
|         [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl | ||||
|   m4_if([$2], [], [], | ||||
|         [$2], [ext], [], | ||||
|         [$2], [noext], [], | ||||
|         [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX])])dnl | ||||
|   m4_if([$3], [], [ax_cxx_compile_cxx$1_required=true], | ||||
|         [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true], | ||||
|         [$3], [optional], [ax_cxx_compile_cxx$1_required=false], | ||||
|         [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])]) | ||||
|   AC_LANG_PUSH([C++])dnl | ||||
|   ac_success=no | ||||
|   AC_CACHE_CHECK(whether $CXX supports C++$1 features by default, | ||||
|   ax_cv_cxx_compile_cxx$1, | ||||
|   [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], | ||||
|     [ax_cv_cxx_compile_cxx$1=yes], | ||||
|     [ax_cv_cxx_compile_cxx$1=no])]) | ||||
|   if test x$ax_cv_cxx_compile_cxx$1 = xyes; then | ||||
|     ac_success=yes | ||||
|   fi | ||||
|  | ||||
|   m4_if([$2], [noext], [], [dnl | ||||
|   if test x$ac_success = xno; then | ||||
|     for switch in -std=gnu++$1 -std=gnu++0x; do | ||||
|       cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) | ||||
|       AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, | ||||
|                      $cachevar, | ||||
|         [ac_save_CXX="$CXX" | ||||
|          CXX="$CXX $switch" | ||||
|          AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], | ||||
|           [eval $cachevar=yes], | ||||
|           [eval $cachevar=no]) | ||||
|          CXX="$ac_save_CXX"]) | ||||
|       if eval test x\$$cachevar = xyes; then | ||||
|         CXX="$CXX $switch" | ||||
|         if test -n "$CXXCPP" ; then | ||||
|           CXXCPP="$CXXCPP $switch" | ||||
|         fi | ||||
|         ac_success=yes | ||||
|         break | ||||
|       fi | ||||
|     done | ||||
|   fi]) | ||||
|  | ||||
|   m4_if([$2], [ext], [], [dnl | ||||
|   if test x$ac_success = xno; then | ||||
|     dnl HP's aCC needs +std=c++11 according to: | ||||
|     dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf | ||||
|     dnl Cray's crayCC needs "-h std=c++11" | ||||
|     for switch in -std=c++$1 -std=c++0x +std=c++$1 "-h std=c++$1"; do | ||||
|       cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) | ||||
|       AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, | ||||
|                      $cachevar, | ||||
|         [ac_save_CXX="$CXX" | ||||
|          CXX="$CXX $switch" | ||||
|          AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], | ||||
|           [eval $cachevar=yes], | ||||
|           [eval $cachevar=no]) | ||||
|          CXX="$ac_save_CXX"]) | ||||
|       if eval test x\$$cachevar = xyes; then | ||||
|         CXX="$CXX $switch" | ||||
|         if test -n "$CXXCPP" ; then | ||||
|           CXXCPP="$CXXCPP $switch" | ||||
|         fi | ||||
|         ac_success=yes | ||||
|         break | ||||
|       fi | ||||
|     done | ||||
|   fi]) | ||||
|   AC_LANG_POP([C++]) | ||||
|   if test x$ax_cxx_compile_cxx$1_required = xtrue; then | ||||
|     if test x$ac_success = xno; then | ||||
|       AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.]) | ||||
|     fi | ||||
|   fi | ||||
|   if test x$ac_success = xno; then | ||||
|     HAVE_CXX$1=0 | ||||
|     AC_MSG_NOTICE([No compiler with C++$1 support was found]) | ||||
|   else | ||||
|     HAVE_CXX$1=1 | ||||
|     AC_DEFINE(HAVE_CXX$1,1, | ||||
|               [define if the compiler supports basic C++$1 syntax]) | ||||
|   fi | ||||
|   AC_SUBST(HAVE_CXX$1) | ||||
| ]) | ||||
|  | ||||
|  | ||||
| dnl  Test body for checking C++11 support | ||||
|  | ||||
| m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11], | ||||
|   _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 | ||||
| ) | ||||
|  | ||||
|  | ||||
| dnl  Test body for checking C++14 support | ||||
|  | ||||
| m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14], | ||||
|   _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 | ||||
|   _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 | ||||
| ) | ||||
|  | ||||
|  | ||||
| dnl  Tests for new features in C++11 | ||||
|  | ||||
| m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[ | ||||
|  | ||||
| // 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 <typename T> | ||||
|     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<void> single_type; | ||||
|     typedef check<check<void>> double_type; | ||||
|     typedef check<check<check<void>>> triple_type; | ||||
|     typedef check<check<check<check<void>>>> 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<T, T> | ||||
|     { | ||||
|       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<int, decltype(0)>::value == true, ""); | ||||
|       static_assert(is_same<int, decltype(c)>::value == false, ""); | ||||
|       static_assert(is_same<int, decltype(v)>::value == false, ""); | ||||
|       auto ac = c; | ||||
|       auto av = v; | ||||
|       auto sumi = ac + av + 'x'; | ||||
|       auto sumf = ac + av + 1.0; | ||||
|       static_assert(is_same<int, decltype(ac)>::value == true, ""); | ||||
|       static_assert(is_same<int, decltype(av)>::value == true, ""); | ||||
|       static_assert(is_same<int, decltype(sumi)>::value == true, ""); | ||||
|       static_assert(is_same<int, decltype(sumf)>::value == false, ""); | ||||
|       static_assert(is_same<int, decltype(add(c, v))>::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 <int...> | ||||
|     struct sum; | ||||
|  | ||||
|     template <int N0, int... N1toN> | ||||
|     struct sum<N0, N1toN...> | ||||
|     { | ||||
|       static constexpr auto value = N0 + sum<N1toN...>::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<typename T> | ||||
|     using member = typename T::member_type; | ||||
|  | ||||
|     template<typename T> | ||||
|     void func(...) {} | ||||
|  | ||||
|     template<typename T> | ||||
|     void func(member<T>*) {} | ||||
|  | ||||
|     void test(); | ||||
|  | ||||
|     void test() { func<foo>(0); } | ||||
|  | ||||
|   } | ||||
|  | ||||
| }  // namespace cxx11 | ||||
|  | ||||
| #endif  // __cplusplus >= 201103L | ||||
|  | ||||
| ]]) | ||||
|  | ||||
|  | ||||
| dnl  Tests for new features in C++14 | ||||
|  | ||||
| m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_14], [[ | ||||
|  | ||||
| // 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_seperators | ||||
|   { | ||||
|  | ||||
|     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 | ||||
|  | ||||
| ]]) | ||||
		Reference in New Issue
	
	Block a user