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 if the STL library is GNU libstdc++ and the C++11 ABI is used.
AC_DEFUN([LYX_LIB_STDCXX_CXX11_ABI],
@ -329,17 +338,13 @@ if test x$GXX = xyes; then
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.3*|4.4*|4.5*|4.6*)
lyx_flags="$lyx_flags c++11-mode"
AM_CXXFLAGS="$AM_CXXFLAGS -std=gnu++0x";;
LYX_CXX_USE_CXX11(gnu++0x);;
clang)
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.
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"
AM_CXXFLAGS="$AM_CXXFLAGS -std=gnu++11"
;;
LYX_CXX_USE_CXX11(gnu++11);;
esac
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

View File

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

View File

@ -12,7 +12,7 @@
#ifndef LYX_FUNCTIONAL_H
#define LYX_FUNCTIONAL_H
#if __cplusplus >= 201103L
#ifdef LYX_USE_CXX11
#include <functional>
#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;
#else
/// Replacement of std::next for older compilers
@ -97,7 +97,7 @@ inline It next(It i, Diff n = 1)
#endif
#if __cplusplus >= 201103L
#ifdef LYX_USE_CXX11
using std::prev;
#else
/// Replacement of std::prev for older compilers

View File

@ -12,7 +12,7 @@
#ifndef 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>
# ifdef _MSC_VER
namespace lyx {

View File

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