Use explicit macro to declare that we want to use C++11

This replaces tests for __cplusplus >= 201103L, which are wrong with gcc 4.6 and earlier. Indeed these versions of gcc define __cplusplus = 1.

Reference:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=1773
This commit is contained in:
Jean-Marc Lasgouttes 2015-05-19 15:10:38 +02:00
parent 8b86af7298
commit 329eae5605
6 changed files with 18 additions and 13 deletions

View File

@ -159,6 +159,15 @@ AC_DEFUN([LYX_LIB_STDCXX],
]) ])
dnl Usage: LYX_CXX_USE_CXX11(STD): pass option -std=STD to the C++ compiler
dnl and define LYX_USE_CXX11.
AC_DEFUN([LYX_CXX_USE_CXX11],
[lyx_flags="$lyx_flags c++11-mode"
AM_CXXFLAGS="$AM_CXXFLAGS -std=$1"
AC_DEFINE([LYX_USE_CXX11], 1, [Define if LyX should use C++11 features])
])
dnl Usage: LYX_LIB_STDCXX_CXX11_ABI: set lyx_cv_lib_stdcxx_cxx11_abi to yes dnl Usage: LYX_LIB_STDCXX_CXX11_ABI: set lyx_cv_lib_stdcxx_cxx11_abi to yes
dnl if the STL library is GNU libstdc++ and the C++11 ABI is used. dnl if the STL library is GNU libstdc++ and the C++11 ABI is used.
AC_DEFUN([LYX_LIB_STDCXX_CXX11_ABI], AC_DEFUN([LYX_LIB_STDCXX_CXX11_ABI],
@ -329,17 +338,13 @@ if test x$GXX = xyes; then
case $gxx_version in case $gxx_version in
4.0*|4.1*|4.2*) AC_ERROR([There is no C++11 support in gcc 4.2 or older]);; 4.0*|4.1*|4.2*) AC_ERROR([There is no C++11 support in gcc 4.2 or older]);;
4.3*|4.4*|4.5*|4.6*) 4.3*|4.4*|4.5*|4.6*)
lyx_flags="$lyx_flags c++11-mode" LYX_CXX_USE_CXX11(gnu++0x);;
AM_CXXFLAGS="$AM_CXXFLAGS -std=gnu++0x";;
clang) clang)
dnl presumably all clang version support c++11. dnl presumably all clang version support c++11.
lyx_flags="$lyx_flags c++11-mode"
dnl the deprecated-register warning is very annoying with Qt4.x right now. dnl the deprecated-register warning is very annoying with Qt4.x right now.
AM_CXXFLAGS="$AM_CXXFLAGS -std=c++11 -Wno-deprecated-register";; LYX_CXX_USE_CXX11(c++11 -Wno-deprecated-register);;
*) *)
lyx_flags="$lyx_flags c++11-mode" LYX_CXX_USE_CXX11(gnu++11);;
AM_CXXFLAGS="$AM_CXXFLAGS -std=gnu++11"
;;
esac esac
if test x$CLANG = xno || test $lyx_cv_lib_stdcxx = yes; then if test x$CLANG = xno || test $lyx_cv_lib_stdcxx = yes; then
dnl <regex> in gcc is unusable in versions less than 4.9.0 dnl <regex> in gcc is unusable in versions less than 4.9.0

View File

@ -14,7 +14,7 @@
#include "support/functional.h" #include "support/functional.h"
#if __cplusplus >= 201103L #ifdef LYX_USE_CXX11
#define LYX_BIND_NS std #define LYX_BIND_NS std

View File

@ -12,7 +12,7 @@
#ifndef LYX_FUNCTIONAL_H #ifndef LYX_FUNCTIONAL_H
#define LYX_FUNCTIONAL_H #define LYX_FUNCTIONAL_H
#if __cplusplus >= 201103L #ifdef LYX_USE_CXX11
#include <functional> #include <functional>
#define LYX_FUNCTIONAL_NS std #define LYX_FUNCTIONAL_NS std

View File

@ -84,7 +84,7 @@ void eliminate_duplicates(C & c)
} }
#if __cplusplus >= 201103L #ifdef LYX_USE_CXX11
using std::next; using std::next;
#else #else
/// Replacement of std::next for older compilers /// Replacement of std::next for older compilers
@ -97,7 +97,7 @@ inline It next(It i, Diff n = 1)
#endif #endif
#if __cplusplus >= 201103L #ifdef LYX_USE_CXX11
using std::prev; using std::prev;
#else #else
/// Replacement of std::prev for older compilers /// Replacement of std::prev for older compilers

View File

@ -12,7 +12,7 @@
#ifndef LYX_REGEXP_H #ifndef LYX_REGEXP_H
#define LYX_REGEXP_H #define LYX_REGEXP_H
#if __cplusplus >= 201103L && defined(LYX_USE_STD_REGEX) #if defined(LYX_USE_CXX11) && defined(LYX_USE_STD_REGEX)
# include <regex> # include <regex>
# ifdef _MSC_VER # ifdef _MSC_VER
namespace lyx { namespace lyx {

View File

@ -12,7 +12,7 @@
#ifndef LYX_SHARED_PTR_H #ifndef LYX_SHARED_PTR_H
#define LYX_SHARED_PTR_H #define LYX_SHARED_PTR_H
#if __cplusplus >= 201103L #ifdef LYX_USE_CXX11
#include <memory> #include <memory>
#define LYX_SHAREDPTR_NS std #define LYX_SHAREDPTR_NS std