name: gcc syntax checks
on:
  push:
    branches: [ master, development, pull-request/* ]
  pull_request:
    branches: [ master, pull-request/* ]

jobs:
  build-gcc-cpp03-linux-STL:
    name: Syntax Check - GCC C++03 Linux STL
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-22.04]

    steps:
    - uses: actions/checkout@v3

    - name: Build
      run: |
        export CC=gcc
        export CXX=g++
        cmake -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF ./test/syntax_check/c++03
        gcc --version
        make -j $(getconf _NPROCESSORS_ONLN)

  build-gcc-cpp03-linux-No-STL:
    name: Syntax Check - GCC C++03 Linux No STL 
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-22.04]

    steps:
    - uses: actions/checkout@v3

    - name: Build
      run: |
        export CC=gcc
        export CXX=g++
        cmake -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF ./test/syntax_check/c++03
        gcc --version
        make -j $(getconf _NPROCESSORS_ONLN)

  build-gcc-cpp11-linux-STL:
    name: Syntax Check - GCC C++11 Linux STL
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-22.04]

    steps:
    - uses: actions/checkout@v3

    - name: Build
      run: |
        export CC=gcc
        export CXX=g++
        cmake -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF ./test/syntax_check/c++11
        gcc --version
        make -j $(getconf _NPROCESSORS_ONLN)

  build-gcc-cpp11-linux-No-STL:
    name: Syntax Check - GCC C++11 Linux No STL 
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-22.04]

    steps:
    - uses: actions/checkout@v3

    - name: Build
      run: |
        export CC=gcc
        export CXX=g++
        cmake -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF ./test/syntax_check/c++11
        gcc --version
        make -j $(getconf _NPROCESSORS_ONLN)

  build-gcc-cpp11-linux-STL-Force-CPP03:
    name: Syntax Check - GCC C++11 Linux STL Force C++03
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-22.04]

    steps:
    - uses: actions/checkout@v3

    - name: Build
      run: |
        export CC=gcc
        export CXX=g++
        cmake -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=ON ./test/syntax_check/c++11
        gcc --version
        make -j $(getconf _NPROCESSORS_ONLN)

  build-gcc-cpp11-linux-No-STL-Force-CPP03:
    name: Syntax Check - GCC C++11 Linux No STL Force C++03
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-22.04]

    steps:
    - uses: actions/checkout@v3

    - name: Build
      run: |
        export CC=gcc
        export CXX=g++
        cmake -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=ON ./test/syntax_check/c++11
        gcc --version
        make -j $(getconf _NPROCESSORS_ONLN)

  build-gcc-cpp14-linux-STL:
    name: Syntax Check - GCC C++14 Linux STL
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-22.04]

    steps:
    - uses: actions/checkout@v3

    - name: Build
      run: |
        export CC=gcc
        export CXX=g++
        cmake -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF ./test/syntax_check/c++14
        gcc --version
        make -j $(getconf _NPROCESSORS_ONLN)

  build-gcc-cpp14-linux-No-STL:
    name: Syntax Check - GCC C++14 Linux No STL 
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-22.04]

    steps:
    - uses: actions/checkout@v3

    - name: Build
      run: |
        export CC=gcc
        export CXX=g++
        cmake -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF ./test/syntax_check/c++14
        gcc --version
        make -j $(getconf _NPROCESSORS_ONLN)

  build-gcc-cpp14-linux-STL-Force-CPP03:
    name: Syntax Check - GCC C++14 Linux STL Force C++03
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-22.04]

    steps:
    - uses: actions/checkout@v3

    - name: Build
      run: |
        export CC=gcc
        export CXX=g++
        cmake -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=ON ./test/syntax_check/c++14
        gcc --version
        make -j $(getconf _NPROCESSORS_ONLN)

  build-gcc-cpp14-linux-No-STL-Force-CPP03:
    name: Syntax Check - GCC C++14 Linux No STL Force C++03
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-22.04]

    steps:
    - uses: actions/checkout@v3

    - name: Build
      run: |
        export CC=gcc
        export CXX=g++
        cmake -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=ON ./test/syntax_check/c++14
        gcc --version
        make -j $(getconf _NPROCESSORS_ONLN)

  build-gcc-cpp17-linux-STL:
    name: Syntax Check - GCC C++17 Linux STL
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-22.04]

    steps:
    - uses: actions/checkout@v3

    - name: Build
      run: |
        export CC=gcc
        export CXX=g++
        cmake -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF ./test/syntax_check/c++17
        gcc --version
        make -j $(getconf _NPROCESSORS_ONLN)

  build-gcc-cpp17-linux-No-STL:
    name: Syntax Check - GCC C++17 Linux No STL 
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-22.04]

    steps:
    - uses: actions/checkout@v3

    - name: Build
      run: |
        export CC=gcc
        export CXX=g++
        cmake -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF ./test/syntax_check/c++17
        gcc --version
        make -j $(getconf _NPROCESSORS_ONLN)

  build-gcc-cpp17-linux-STL-Force-CPP03:
    name: Syntax Check - GCC C++17 Linux STL Force C++03
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-22.04]

    steps:
    - uses: actions/checkout@v3

    - name: Build
      run: |
        export CC=gcc
        export CXX=g++
        cmake -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=ON ./test/syntax_check/c++17
        gcc --version
        make -j $(getconf _NPROCESSORS_ONLN)

  build-gcc-cpp17-linux-No-STL-Force-CPP03:
    name: Syntax Check - GCC C++17 Linux No STL Force C++03
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-22.04]

    steps:
    - uses: actions/checkout@v3

    - name: Build
      run: |
        export CC=gcc
        export CXX=g++
        cmake -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=ON ./test/syntax_check/c++17
        gcc --version
        make -j $(getconf _NPROCESSORS_ONLN)

  build-gcc-cpp20-linux-STL:
    name: Syntax Check - GCC C++20 Linux STL
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-22.04]

    steps:
    - uses: actions/checkout@v3

    - name: Build
      run: |
        export CC=gcc
        export CXX=g++
        cmake -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF ./test/syntax_check/c++20
        gcc --version
        make -j $(getconf _NPROCESSORS_ONLN)

  build-gcc-cpp20-linux-No-STL:
    name: Syntax Check - GCC C++20 Linux No STL 
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-22.04]

    steps:
    - uses: actions/checkout@v3

    - name: Build
      run: |
        export CC=gcc
        export CXX=g++
        cmake -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF ./test/syntax_check/c++20
        gcc --version
        make -j $(getconf _NPROCESSORS_ONLN)

  build-gcc-cpp20-linux-STL-Force-CPP03:
    name: Syntax Check - GCC C++20 Linux STL Force C++03
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-22.04]

    steps:
    - uses: actions/checkout@v3

    - name: Build
      run: |
        export CC=gcc
        export CXX=g++
        cmake -DNO_STL=OFF -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=ON ./test/syntax_check/c++20
        gcc --version
        make -j $(getconf _NPROCESSORS_ONLN)

  build-gcc-cpp20-linux-No-STL-Force-CPP03:
    name: Syntax Check - GCC C++20 Linux No STL Force C++03
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-22.04]

    steps:
    - uses: actions/checkout@v3

    - name: Build
      run: |
        export CC=gcc
        export CXX=g++
        cmake -DNO_STL=ON -DETL_USE_TYPE_TRAITS_BUILTINS=OFF -DETL_USER_DEFINED_TYPE_TRAITS=OFF -DETL_FORCE_TEST_CPP03_IMPLEMENTATION=ON ./test/syntax_check/c++20
        gcc --version
        make -j $(getconf _NPROCESSORS_ONLN)