From 7e842ac198ef31f09e87f6f525ca744161259b46 Mon Sep 17 00:00:00 2001 From: Sy Brand Date: Thu, 24 Nov 2022 19:44:29 +0000 Subject: [PATCH] Test on many compilers (#123) --- .github/workflows/cmake.yml | 113 +++++++++++++++++++++++++++++++++++- README.md | 2 +- include/tl/expected.hpp | 8 ++- 3 files changed, 118 insertions(+), 5 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 972a696..a11f0ff 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -8,16 +8,123 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 + + strategy: + matrix: + std: [11, 14] + cxx: [g++-4.8, g++-4.9, g++-5, g++-6, g++-7, g++-8, g++-9, g++-10, clang++-3.5, clang++-3.6, clang++-3.7, clang++-3.8, clang++-3.9, clang++-4.0, clang++-5.0, clang++-6.0, clang++-7, clang++-8, clang++-9, clang++-10, clang++-11] + + exclude: + - cxx: g++-4.8 + std: 14 + - cxx: g++4.9 + std: 14 + + include: + - cxx: g++-4.8 + install: sudo apt install g++-4.8 + - cxx: g++-4.9 + install: sudo apt install g++-4.9 + - cxx: g++-5 + install: sudo apt install g++-5 + - cxx: g++-6 + install: sudo apt install g++-6 + - cxx: g++-7 + install: sudo apt install g++-7 + - cxx: g++-8 + std: 11 + install: sudo apt install g++-8 + - cxx: g++-8 + std: 14 + install: sudo apt install g++-8 + - cxx: g++-8 + std: 17 + install: sudo apt install g++-8 + - cxx: g++-9 + std: 14 + - cxx: g++-9 + std: 17 + - cxx: g++-10 + std: 14 + - cxx: g++-10 + std: 17 + - cxx: g++-11 + std: 14 + install: sudo apt install g++-11 + - cxx: g++-11 + std: 17 + install: sudo apt install g++-11 + - cxx: g++-11 + std: 20 + install: sudo apt install g++-11 + + + - cxx: clang++-3.5 + install: sudo apt install clang-3.5 + - cxx: clang++-3.6 + install: sudo apt install clang-3.6 + - cxx: clang++-3.7 + install: sudo apt install clang-3.7 + - cxx: clang++-3.8 + install: sudo apt install clang-3.8 + - cxx: clang++-3.9 + install: sudo apt install clang-3.9 + - cxx: clang++-4.0 + install: sudo apt install clang-4.0 + - cxx: clang++-5.0 + install: sudo apt install clang-5.0 + - cxx: clang++-6.0 + install: sudo apt install clang-6.0 + - cxx: clang++-7 + install: sudo apt install clang-7 + - cxx: clang++-8 + install: sudo apt install clang-8 + - cxx: clang++-9 + install: sudo apt install clang-9 + - cxx: clang++-10 + install: sudo apt install clang-10 + - cxx: clang++-11 + install: sudo apt install clang-11 + + + - cxx: clang++-6.0 + std: 17 + install: sudo apt install clang-6.0 + - cxx: clang++-7 + std: 17 + install: sudo apt install clang-7 + - cxx: clang++-8 + std: 17 + install: sudo apt install clang-8 + - cxx: clang++-9 + std: 17 + install: sudo apt install clang-9 + - cxx: clang++-10 + std: 17 + install: sudo apt install clang-10 + - cxx: clang++-11 + std: 17 + install: sudo apt install clang-11 steps: - uses: actions/checkout@v3 + + - name: Setup Toolchain + run: | + sudo apt-add-repository 'deb http://azure.archive.ubuntu.com/ubuntu/ xenial main' + sudo apt-add-repository 'deb http://azure.archive.ubuntu.com/ubuntu/ xenial universe' + sudo apt-add-repository 'deb http://azure.archive.ubuntu.com/ubuntu/ bionic main' + sudo apt-add-repository 'deb http://azure.archive.ubuntu.com/ubuntu/ bionic universe' + ${{matrix.install}} - name: Configure CMake - run: cmake -B ${{github.workspace}}/build + env: + CXX: ${{matrix.cxx}} + run: cmake -B ${{github.workspace}}/build -DCMAKE_CXX_STANDARD=${{matrix.std}} - name: Build - run: cmake --build ${{github.workspace}}/build + run: cmake --build ${{github.workspace}}/build - name: Test working-directory: ${{github.workspace}}/build diff --git a/README.md b/README.md index d16836e..493d501 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Single header implementation of `std::expected` with functional-style extensions. [![Documentation Status](https://readthedocs.org/projects/tl-docs/badge/?version=latest)](https://tl.tartanllama.xyz/en/latest/?badge=latest) -Clang + GCC: [![Linux Build Status](https://travis-ci.org/TartanLlama/expected.png?branch=master)](https://travis-ci.org/TartanLlama/expected) +Clang + GCC: [![Linux Build Status](https://github.com/TartanLlama/expected/actions/workflows/cmake.yml/badge.svg)](https://github.com/TartanLlama/expected/actions/workflows/cmake.yml) MSVC: [![Windows Build Status](https://ci.appveyor.com/api/projects/status/k5x00xa11y3s5wsg?svg=true)](https://ci.appveyor.com/project/TartanLlama/expected) Available on [Vcpkg](https://github.com/microsoft/vcpkg/tree/master/ports/tl-expected) and [Conan](https://github.com/yipdw/conan-tl-expected). diff --git a/include/tl/expected.hpp b/include/tl/expected.hpp index 775397b..6619fc9 100644 --- a/include/tl/expected.hpp +++ b/include/tl/expected.hpp @@ -612,7 +612,13 @@ template struct expected_storage_base { // `T` is `void`, `E` is trivially-destructible template struct expected_storage_base { - TL_EXPECTED_MSVC2015_CONSTEXPR expected_storage_base() : m_has_val(true) {} + #if __GNUC__ <= 5 + //no constexpr for GCC 4/5 bug + #else + TL_EXPECTED_MSVC2015_CONSTEXPR + #endif + expected_storage_base() : m_has_val(true) {} + constexpr expected_storage_base(no_init_t) : m_val(), m_has_val(false) {} constexpr expected_storage_base(in_place_t) : m_has_val(true) {}