From 22f599250e926555bdef0d50ee2198b3eb2da02a Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Wed, 12 Jun 2019 15:03:18 +0200 Subject: [PATCH] Remove support for gcc 4.6 This was kept so long because of Ubuntu 12.04 LTS, but having a not-really-c++11 compiler is not nice. --- INSTALL | 5 ++--- config/lyxinclude.m4 | 5 ++--- src/TexRow.h | 10 ---------- src/support/Cache.h | 4 ---- src/support/Changer.h | 4 +--- src/support/RefChanger.h | 11 ----------- src/support/unicode.cpp | 7 ------- src/support/unicode.h | 4 ++-- 8 files changed, 7 insertions(+), 43 deletions(-) diff --git a/INSTALL b/INSTALL index d19159fb6e..20c60a5f6a 100644 --- a/INSTALL +++ b/INSTALL @@ -47,9 +47,8 @@ You will also probably need GNU m4 (perhaps installed as gm4). Requirements ------------ -First of all, you will need a recent C++ compiler, where recent means -that the compilers are close to C++11 standard conforming like gcc (at -least 4.6) or clang. +First of all, you will need a C++11 standard conforming compiler, like gcc (at +least 4.7) or clang. LyX makes great use of the C++ Standard Template Library (STL). This means that gcc users will have to install the relevant libstdc++ diff --git a/config/lyxinclude.m4 b/config/lyxinclude.m4 index 8e1d2793ce..b58faccc75 100644 --- a/config/lyxinclude.m4 +++ b/config/lyxinclude.m4 @@ -170,7 +170,7 @@ selects C++11 mode; gives an error when C++11 mode is not found. AC_DEFUN([LYX_CXX_CXX11_FLAGS], [AC_CACHE_CHECK([for at least C++11 mode], [lyx_cv_cxx11_flags], [lyx_cv_cxx11_flags=none - for flag in -std=c++14 -std=c++11 "" -std=c++0x -std=gnu++14 -std=gnu++11 -std=gnu++0x ; do + for flag in -std=c++14 -std=c++11 "" -std=gnu++14 -std=gnu++11 ; do save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS" save_CXXFLAGS=$CXXFLAGS @@ -413,8 +413,7 @@ if test x$GXX = xyes; then AM_CPPFLAGS="$AM_CPPFLAGS -Wall -Wextra" fi case $gxx_version in - 2.*|3.*) AC_ERROR([gcc >= 4.6 is required]);; - 4.0*|4.1*|4.2*|4.3*|4.4*|4.5*) AC_ERROR([gcc >= 4.6 is required]);; + 2.*|3.*|4.@<:@0-6@:>@) AC_ERROR([gcc >= 4.7 is required]);; esac if test x$enable_stdlib_debug = xyes ; then dnl FIXME: for clang/libc++, one should define _LIBCPP_DEBUG2=0 diff --git a/src/TexRow.h b/src/TexRow.h index e85b141aef..8edcd8eb16 100644 --- a/src/TexRow.h +++ b/src/TexRow.h @@ -119,7 +119,6 @@ public: /// TexRow(); -#if !(defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 6)) /// Copy can be expensive and is not usually useful for TexRow. /// Force explicit copy, prefer move instead. This also prevents /// move()s from being converted into copy silently. @@ -127,10 +126,6 @@ public: TexRow(TexRow && other) = default; TexRow & operator=(TexRow const & other) = default; TexRow & operator=(TexRow && other) = default; -# else - //for gcc 4.6, nothing to do: it's enough to disable implicit copy during - // dev with more recent versions of gcc. -#endif /// Clears structure. void reset(); @@ -241,7 +236,6 @@ struct TexString { docstring str; /// TexRow texrow; -#if !(defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 6)) /// Copy can be expensive and is not usually useful for TexString. /// Force explicit copy, prefer move instead. This also prevents /// move()s from being converted into copy silently. @@ -249,10 +243,6 @@ struct TexString { TexString(TexString && other) = default; TexString & operator=(TexString const & other) = default; TexString & operator=(TexString && other) = default; -# else - //for gcc 4.6, nothing to do: it's enough to disable implicit copy during - // dev with more recent versions of gcc. -#endif /// Empty TexString TexString() = default; /// Texstring containing str and TexRow with enough lines which are empty diff --git a/src/support/Cache.h b/src/support/Cache.h index f1738c7147..2b97f6e53a 100644 --- a/src/support/Cache.h +++ b/src/support/Cache.h @@ -33,15 +33,11 @@ namespace lyx { */ template class Cache : private QCache { -#if !(defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 6)) static_assert(std::is_copy_constructible::value, "lyx::Cache only stores copyable objects!"); static_assert(std::is_default_constructible::value, "lyx::Cache only stores default-constructible objects!"); using Q = QCache; -#else - typedef QCache Q; -#endif public: /// diff --git a/src/support/Changer.h b/src/support/Changer.h index 2de7520341..212bcf1d85 100644 --- a/src/support/Changer.h +++ b/src/support/Changer.h @@ -24,9 +24,7 @@ struct Revertible { virtual void keep() {} }; -//for gcc 4.6 -//using Changer = unique_ptr; -typedef unique_ptr Changer; +using Changer = unique_ptr; } // namespace lyx diff --git a/src/support/RefChanger.h b/src/support/RefChanger.h index 65bb78106c..c279e4764a 100644 --- a/src/support/RefChanger.h +++ b/src/support/RefChanger.h @@ -46,18 +46,7 @@ private: }; -//for gcc 4.6 -#if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 6) -template -struct RefChanger : unique_ptr> -{ - RefChanger(unique_ptr> p) - : unique_ptr>(move(p)) - {} -}; -#else template using RefChanger = unique_ptr>; -#endif /// Saves the value of \param ref in a movable object diff --git a/src/support/unicode.cpp b/src/support/unicode.cpp index b583982740..ecc415b2f3 100644 --- a/src/support/unicode.cpp +++ b/src/support/unicode.cpp @@ -66,13 +66,6 @@ IconvProcessor::IconvProcessor(string tocode, string fromcode) {} -// for gcc 4.6 -IconvProcessor::IconvProcessor(IconvProcessor && other) - : tocode_(move(other.tocode_)), fromcode_(move(other.fromcode_)), - h_(move(other.h_)) -{} - - bool IconvProcessor::init() { if (h_) diff --git a/src/support/unicode.h b/src/support/unicode.h index 17b95dd290..6373e470ba 100644 --- a/src/support/unicode.h +++ b/src/support/unicode.h @@ -62,8 +62,8 @@ public: char * out_buffer, size_t max_out_size); /// target encoding std::string to() const { return tocode_; } - // required by g++ 4.6 - IconvProcessor(IconvProcessor && other); + // required by g++ 4.7 + IconvProcessor(IconvProcessor &&) = default; }; /// Get the global IconvProcessor instance of the current thread for -- 2.39.2