From bae872508fe878e0ded322cd5ad4a4c71d56fb78 Mon Sep 17 00:00:00 2001 From: Simon Brand Date: Wed, 6 Jun 2018 10:24:52 +0100 Subject: [PATCH] Fix GCC 5.5. --- .travis.yml | 19 ++++++++++++++++++- tl/expected.hpp | 14 ++++++++++---- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index fc9cfd7..dab821b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,14 @@ sudo: false matrix: include: + - compiler: gcc + addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - g++-5 + env: COMPILER=g++-5 CXXSTD=11 - compiler: gcc addons: apt: @@ -126,7 +134,16 @@ matrix: - clang++-6.0 - libc++-dev env: COMPILER=clang++-6.0 CXXSTD=11 - + + - compiler: gcc + addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - g++-5 + env: COMPILER=g++-5 CXXSTD=14 + - compiler: gcc addons: apt: diff --git a/tl/expected.hpp b/tl/expected.hpp index 5052c81..bcf6cf1 100644 --- a/tl/expected.hpp +++ b/tl/expected.hpp @@ -46,6 +46,12 @@ #define TL_EXPECTED_GCC54 #endif +#if (defined(__GNUC__) && __GNUC__ == 5 && __GNUC_MINOR__ <= 5 && \ + !defined(__clang__)) +/// \exclude +#define TL_EXPECTED_GCC55 +#endif + #if (defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ <= 9 && \ !defined(__clang__)) // GCC < 5 doesn't support overloading on const&& for member functions @@ -1128,7 +1134,7 @@ public: typedef unexpected unexpected_type; #if defined(TL_EXPECTED_CXX14) && !defined(TL_EXPECTED_GCC49) && \ - !defined(TL_EXPECTED_GCC54) + !defined(TL_EXPECTED_GCC54) && !defined(TL_EXPECTED_GCC55) /// \group and_then /// Carries out some operation which returns an expected on the stored object /// if there is one. \requires `std::invoke(std::forward(f), value())` @@ -1206,7 +1212,7 @@ public: #endif #if defined(TL_EXPECTED_CXX14) && !defined(TL_EXPECTED_GCC49) && \ - !defined(TL_EXPECTED_GCC54) + !defined(TL_EXPECTED_GCC54) && !defined(TL_EXPECTED_GCC55) /// \brief Carries out some operation on the stored object if there is one. /// \returns Let `U` be the result of `std::invoke(std::forward(f), /// value())`. If `U` is `void`, returns an `expected, otherwise @@ -1287,7 +1293,7 @@ public: #endif #if defined(TL_EXPECTED_CXX14) && !defined(TL_EXPECTED_GCC49) && \ - !defined(TL_EXPECTED_GCC54) + !defined(TL_EXPECTED_GCC54) && !defined(TL_EXPECTED_GCC55) /// \brief Carries out some operation on the stored unexpected object if there /// is one. /// \returns Let `U` be the result of `std::invoke(std::forward(f), @@ -1955,7 +1961,7 @@ auto expected_map_impl(Exp &&exp, F &&f) -> expected> { #endif #if defined(TL_EXPECTED_CXX14) && !defined(TL_EXPECTED_GCC49) && \ - !defined(TL_EXPECTED_GCC54) + !defined(TL_EXPECTED_GCC54) && !defined(TL_EXPECTED_GCC55) template (), std::declval().error())),