mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-09 18:31:04 +00:00
Improve C++11 support
If we compile in C++11 mode, do not use the boost replacements for bind, functional and shared_ptr. regex is excluded, since it misses match_partial, and gcc does not provide a usable one in versions less than 4.9.0. I also removed the #define for match_partial, since this is dangerous. Now you get a compile error instead of subtle runtime differences.
This commit is contained in:
parent
c9609fe56a
commit
90b1f084bf
@ -250,6 +250,8 @@ if(UNIX OR MINGW)
|
|||||||
set(LYX_USE_TR1 1)
|
set(LYX_USE_TR1 1)
|
||||||
# GCC <= 4.5 does not support regex: there are linker errors
|
# GCC <= 4.5 does not support regex: there are linker errors
|
||||||
# http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr1
|
# http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr1
|
||||||
|
# <regex> and <tr1/regex> in gcc are unusable in versions less than 4.9.0
|
||||||
|
# see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631
|
||||||
set(LYX_USE_TR1_REGEX 0)
|
set(LYX_USE_TR1_REGEX 0)
|
||||||
endif()
|
endif()
|
||||||
if (LYX_ENABLE_CXX11)
|
if (LYX_ENABLE_CXX11)
|
||||||
|
@ -285,6 +285,8 @@ char * strerror(int n);
|
|||||||
#define BOOST_SIGNALS_NO_DEPRECATION_WARNING 1
|
#define BOOST_SIGNALS_NO_DEPRECATION_WARNING 1
|
||||||
|
|
||||||
// TR1 regex not supported in GCC <= 4.5
|
// TR1 regex not supported in GCC <= 4.5
|
||||||
|
// <regex> and <tr1/regex> in gcc are unusable in versions less than 4.9.0
|
||||||
|
// see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631
|
||||||
// clang defines __GNUC__ but libc++ does not have tr1
|
// clang defines __GNUC__ but libc++ does not have tr1
|
||||||
#ifndef LYX_USE_TR1
|
#ifndef LYX_USE_TR1
|
||||||
# if __GNUC__ == 4 && !defined(USE_LLVM_LIBCPP)
|
# if __GNUC__ == 4 && !defined(USE_LLVM_LIBCPP)
|
||||||
|
@ -16,25 +16,38 @@
|
|||||||
|
|
||||||
#ifdef LYX_USE_TR1
|
#ifdef LYX_USE_TR1
|
||||||
|
|
||||||
|
#define LYX_BIND_NS std::tr1
|
||||||
|
|
||||||
namespace lyx
|
namespace lyx
|
||||||
{
|
{
|
||||||
using std::tr1::bind;
|
|
||||||
using std::tr1::placeholders::_1;
|
using std::tr1::placeholders::_1;
|
||||||
using std::tr1::placeholders::_2;
|
using std::tr1::placeholders::_2;
|
||||||
using std::tr1::ref;
|
}
|
||||||
|
|
||||||
|
#elif __cplusplus >= 201103L
|
||||||
|
|
||||||
|
#define LYX_BIND_NS std
|
||||||
|
|
||||||
|
namespace lyx
|
||||||
|
{
|
||||||
|
using std::placeholders::_1;
|
||||||
|
using std::placeholders::_2;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
|
#define LYX_BIND_NS boost
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace lyx
|
namespace lyx
|
||||||
{
|
{
|
||||||
using boost::bind;
|
using LYX_BIND_NS::bind;
|
||||||
using boost::ref;
|
using LYX_BIND_NS::ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#undef LYX_BIND_NS
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -20,22 +20,27 @@
|
|||||||
#include <tr1/functional>
|
#include <tr1/functional>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace lyx
|
#define LYX_FUNCTIONAL_NS std::tr1
|
||||||
{
|
|
||||||
using std::tr1::function;
|
#elif __cplusplus >= 201103L
|
||||||
}
|
|
||||||
|
#include <functional>
|
||||||
|
#define LYX_FUNCTIONAL_NS std
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#include <boost/function.hpp>
|
#include <boost/function.hpp>
|
||||||
#include <boost/functional.hpp>
|
#include <boost/functional.hpp>
|
||||||
|
#define LYX_FUNCTIONAL_NS boost
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace lyx
|
namespace lyx
|
||||||
{
|
{
|
||||||
using boost::function;
|
using LYX_FUNCTIONAL_NS::function;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#undef LYX_FUNCTIONAL_NS
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -58,8 +58,7 @@ namespace lyx {
|
|||||||
}
|
}
|
||||||
# else
|
# else
|
||||||
# include <tr1/regex>
|
# include <tr1/regex>
|
||||||
// TODO no match_partial in gcc, how to replace?
|
// TODO no match_partial in TR1, how to replace?
|
||||||
# define match_partial match_default
|
|
||||||
# endif
|
# endif
|
||||||
# define LR_NS std::tr1
|
# define LR_NS std::tr1
|
||||||
namespace lyx {
|
namespace lyx {
|
||||||
@ -67,6 +66,17 @@ using LR_NS::regex;
|
|||||||
using LR_NS::regex_match;
|
using LR_NS::regex_match;
|
||||||
using LR_NS::sregex_iterator;
|
using LR_NS::sregex_iterator;
|
||||||
}
|
}
|
||||||
|
#elif LYX_USE_TR1_REGEX
|
||||||
|
# include <regex>
|
||||||
|
// <regex> in gcc is unusable in versions less than 4.9.0
|
||||||
|
// see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631
|
||||||
|
// TODO no match_partial in std, how to replace?
|
||||||
|
# define LR_NS std
|
||||||
|
namespace lyx {
|
||||||
|
using LR_NS::regex;
|
||||||
|
using LR_NS::regex_match;
|
||||||
|
using LR_NS::sregex_iterator;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
# include <boost/regex.hpp>
|
# include <boost/regex.hpp>
|
||||||
# define LR_NS boost
|
# define LR_NS boost
|
||||||
|
@ -20,23 +20,27 @@
|
|||||||
#include <tr1/memory>
|
#include <tr1/memory>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace lyx
|
#define LYX_SHAREDPTR_NS std::tr1
|
||||||
{
|
|
||||||
using std::tr1::shared_ptr;
|
#elif __cplusplus >= 201103L
|
||||||
using std::tr1::const_pointer_cast;
|
|
||||||
}
|
#include <memory>
|
||||||
|
#define LYX_SHAREDPTR_NS std
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
|
#define LYX_SHAREDPTR_NS boost
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace lyx
|
namespace lyx
|
||||||
{
|
{
|
||||||
using boost::shared_ptr;
|
using LYX_SHAREDPTR_NS::shared_ptr;
|
||||||
using boost::const_pointer_cast;
|
using LYX_SHAREDPTR_NS::const_pointer_cast;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#undef LYX_SHAREDPTR_NS
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user