unable to compile with std::expected in gcc

42 Views Asked by At

I'm trying to compile a minimal viable example, which contains the following file:
main.cpp:

#include <expected>
#include <iostream>

std::expected<int, std::string> try_func() {
    return 100;
}

int main() {
    try_func();

    return 0;
}

I'm additionally using premake5 to create my build scripts. Here is my build script: premake5.lua:

workspace "interop"
    configurations { "Release" }
    architecture "x64"
    startproject "test_project"

project "test_project" 
    kind "ConsoleApp"
    language "C++"
    cppdialect "C++latest"

    location "test_project"

    targetdir ("bin/%{cfg.buildcfg}/%{prj.name}")
    objdir ("bin-int/%{cfg.buildcfg}/%{prj.name}")

    files
    {
        "test_project/main.cpp"
    }

The project is structured as follows:

interop
  test_project
    main.cpp
  premake5.lua

Compiling on Windows

To compile on Windows I just run:

premake5 vs2022

And then I build the generated VS projects, everything works correctly.

Compiling on Linux

To compile on Linux I run:

premake5 gmake
make 

My CXX is GCC, and I've updated to the latest version via -Syu. Running the above command produces the following warnings:

'expected' in namespace 'std' does not name a template type

Note that I do get the following message:

'std::expected' is only available from C++23 onwards

I'm however puzzled as to why I'm not supposedly compiling with C++23 when I'm using the latest flag. Any help is greatly appreciated.

0

There are 0 best solutions below