[Libreoffice-commits] core.git: include/o3tl

Christoph Lutz christoph.lutz_ml at cib.de
Thu May 7 07:11:17 PDT 2015


 include/o3tl/underlying_type.hxx |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

New commits:
commit 7ad4e562b462af22a1c29c955293238cdb30267b
Author: Christoph Lutz <christoph.lutz_ml at cib.de>
Date:   Thu May 7 13:47:35 2015 +0200

    improve fallback behaviour of underlying_type for old gcc
    
    The fix fbd85c25b is not sufficient to build with an old GCC 4.6.
    The problem was, that underlying_type returned an int as default
    value for GCC 4.6 and int allows negative values that are forbidden
    in typed_flags_set.
    
    Changed it to alternative solution suggested in
    http://stackoverflow.com/questions/26148192/underlying-type-of-a-c-enum-in-c03
    
    Change-Id: I20f44b8cef9c692efb583971bd251f1c34c289ab
    Reviewed-on: https://gerrit.libreoffice.org/15663
    Reviewed-by: Katarina Behrens <Katarina.Behrens at cib.de>
    Tested-by: Katarina Behrens <Katarina.Behrens at cib.de>

diff --git a/include/o3tl/underlying_type.hxx b/include/o3tl/underlying_type.hxx
index 4b2e077..534e088 100644
--- a/include/o3tl/underlying_type.hxx
+++ b/include/o3tl/underlying_type.hxx
@@ -19,7 +19,11 @@ namespace o3tl {
 template<typename T> struct underlying_type {
 #if defined __GNUC__ && __GNUC__ == 4 && __GNUC_MINOR__ <= 6 && \
         !defined __clang__
-    typedef int type;
+    typedef typename std::conditional<
+        T( -1 ) < T( 0 ),
+        typename std::make_signed< T >::type,
+        typename std::make_unsigned< T >::type
+        >::type type;
 #else
     typedef typename std::underlying_type<T>::type type;
 #endif


More information about the Libreoffice-commits mailing list