error: 'format' is not a member of 'std'

Решил значит воспользоваться функцией std::format() в C++ (гуглил, в С++ такая функция поддерживается с C++20). Вот код:

#include <bits/stdc++.h>
int main() {
    auto now = std::chrono::system_clock::now();
    time_t now_t = std::chrono::system_clock::to_time_t(now);
    auto time = std::put_time(localtime(&now_t), "%m.%Y");
    std::cout << std::format("{}", time);
    return 0;
}

Далее в cmd ввёл:

cd C:\Apache24\cgi-bin
g++ main.cpp -o main.cgi

Ну она решила вынести мне мозги своим ответом:

main.cpp: In function 'int main()':
main.cpp:34:23: error: 'format' is not a member of 'std'
   34 |     std::cout << std::format("{}", time);
      |

P.S.: использую VS Code, вот содержимое файла c_cpp_properties:

{
"configurations": [
    {
        "name": "Win32",
        "includePath": [
            "${workspaceFolder}/**"
        ],
        "defines": [
            "_DEBUG",
            "UNICODE",
            "_UNICODE"
        ],
        "compilerPath": "C:\\msys64\\mingw64\\bin\\g++.exe",
        "cStandard": "c17",
        "cppStandard": "gnu++20",
        "intelliSenseMode": "windows-gcc-x64"
    }
],
"version": 4

}

P.P.S.: Понятное дело, что я привёл лишь часть кода из main.cpp, потому что остальной код не участвует в той проблеме, что я выше привёл.


Ответы (1 шт):

Автор решения: Serge3leo

std::put_time() предназначен для выдачи времени сразу в ostream, а std::format() принимает непосредственно std::chrono::time_point. Грубо говоря, это две альтернативы, одна - C++11, другая - C++20.

#define _CRT_SECURE_NO_WARNINGS (1)  // Для localtime()
#include <ctime>
#include <chrono>
#include <format>
#include <iomanip>

int main() {
    auto now = std::chrono::system_clock::now();
    std::cout << "std::format: " << std::format("{:%m.%Y}\n", now);

    time_t now_t = std::chrono::system_clock::to_time_t(now);
    std::cout << "std::put_time: " << std::put_time(localtime(&now_t), "%m.%Y")
              << '\n';

    return 0;
}

Как бы, Microsoft Visual Studio Community 2022 (64-разрядная версия) - Current, Версия 17.12.2, не возражает. ?

std::format: 04.2025
std::put_time: 04.2025
→ Ссылка