Updated configuration for Embarcadero C++ clang-based compilers. Created a better test for CWCHAR compatibility which involves a minimum of multi-byte character functionality also.

This commit is contained in:
Edward Diener
2020-04-03 20:53:01 -04:00
parent be471047f2
commit efaceea8c3
3 changed files with 32 additions and 25 deletions

View File

@ -15,12 +15,21 @@
# define BOOST_NO_CXX11_THREAD_LOCAL
# define BOOST_NO_CXX11_ATOMIC_SMART_PTR
// 32 functions are missing from the current RTL in cwchar, so it really can not be used even if it exists
# define BOOST_NO_CWCHAR
# ifndef __MT__ /* If compiling in single-threaded mode, assume there is no CXX11_HDR_ATOMIC */
# define BOOST_NO_CXX11_HDR_ATOMIC
# endif
#define BOOST_NO_FENV_H /* temporarily disable this until we can link against fegetround fesetround feholdexcept */
#define BOOST_NO_CXX11_HDR_EXCEPTION /* Reported this bug to Embarcadero with the latest C++ Builder Rio release */
/* temporarily disable this until we can link against fegetround fesetround feholdexcept */
#define BOOST_NO_FENV_H
/* Reported this bug to Embarcadero with the latest C++ Builder Rio release */
#define BOOST_NO_CXX11_HDR_EXCEPTION
//
// check for exception handling support:
@ -103,33 +112,28 @@
#endif /* defined(BOOST_EMBTC) */
#if defined(BOOST_EMBTC_WINDOWS)
// About TR1 headers and features:
// BOOST_HAS_TR1_*-style definitions are placed in "boost\tr1\detail\config.hpp",
// because there, they will always be found, but here, they may be not check.
// // This is needed to allow 64-bit integers in cstdint.hpp
//# define BOOST_HAS_MS_INT64
/* The Windows SDK for Embarcadero has the deprecated 'chdir' function for _chdir
so make sure any call to _chdir becomes a call to chdir */
# define _chdir chdir
//# define BOOST_HAS_RVALUE_REFS
/* Undefine the symbols and the Windows platform will automatically define them for us
as appropriate */
#if defined(BOOST_SYMBOL_EXPORT)
#undef BOOST_SYMBOL_EXPORT
#endif
// // Boost.Fusion should not use its preprocessed templates,
// // due to we can use its variadic cpp11 templates. If that
// // macro is not defined it tries to use both at the same time
// // giving a redefinition error.
//# define BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
#if defined(BOOST_SYMBOL_IMPORT)
#undef BOOST_SYMBOL_IMPORT
#endif
// // Bcc64 don't have this <fenv.h> header
//# define BOOST_NO_FENV_H
#if defined(BOOST_SYMBOL_VISIBLE)
#undef BOOST_SYMBOL_VISIBLE
#endif
// // This is not necessary with the last versions of bcc64
//# if !defined(__FUNC__)
//# define __FUNC__ __func__
//# endif
// FVTODO: This was uncommended with 1_55 - prolly worth testing this by uncommenting it.
// Dinkumware on Win32 and Win64 platforms has <cstdint>
// # define BOOST_HAS_STDINT_H
#endif /* BOOST_EMBTC_WINDOWS */
#endif
# undef BOOST_COMPILER
# define BOOST_COMPILER "Embarcadero-Clang C++ version " BOOST_STRINGIZE(__CODEGEARC__) " clang: " __clang_version__

View File

@ -98,7 +98,7 @@
#endif
#include <typeinfo>
#if ( (!_HAS_EXCEPTIONS && !defined(__ghs__)) || (defined(__ghs__) && !_HAS_NAMESPACE) ) && !defined(__TI_COMPILER_VERSION__) && !defined(__VISUALDSPVERSION__) \
&& !defined(__VXWORKS__)
&& !defined(__VXWORKS__) && !defined(BOOST_EMBTC_WINDOWS)
# define BOOST_NO_STD_TYPEINFO
#endif
#endif

View File

@ -18,6 +18,9 @@ int test()
{
wchar_t c1[2] = { 0 };
wchar_t c2[2] = { 0 };
char c3[2] = { 0 };
mbstate_t mb = mbstate_t();
if(!mbsinit(&mb) || mbrlen(c3,1,&mb)) return -1;
if(wcscmp(c1,c2) || wcslen(c1)) return -1;
//wcscpy(c1,c2);
wcsxfrm(c1,c2,0);