blob: 8ab9acc17a0a5a61544505a8fee3ffe1b171e678 [file] [log] [blame]
// -*- C++ -*- Libstdc++ version details header.
// Copyright (C) 2018-2026 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.
// You should have received a copy of the GNU General Public License and
// a copy of the GCC Runtime Library Exception along with this program;
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
// <http://www.gnu.org/licenses/>.
/** @file version
* This is a Standard C++ Library header. You should `#include` this header
* in your programs, rather than any of the `*.h` implementation files.
*
* The `<version>` header defines feature test macros that describe the
* supported features of the C++ standard library implementation being used.
* The macros that are defined, and their values, depend on compiler flags
* (usually `-std`, but others such as `-fcoroutines` and `-fno-aligned-new`
* can affect them).
*
* These macros can be used to conditionally enable or disable code:
*
* ```
* #include <version>
* #ifdef __cpp_lib_expected
* // std::expected is supported
* #endif
* ```
*
* The macro values indicate different levels of support, for example
* `__cpp_lib_expected == 202202L` means only the original feature set of
* `std::expected` is supported, while `__cpp_lib_expected == 202211L` means
* that the monadic functions such as `std::expected::and_then` are also
* supported.
*
* The list of macros defined in `<version>` and their meanings is given in
* the C++ standard committee's SD-6 document:
* https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations
*
* `<version>` may also define non-standard, implementation-specific macros,
* such as libstdc++'s `_GLIBCXX_RELEASE`. However, the standard feature
* test macros should be preferred over depending on specific versions of any
* particular implementation.
*
* The `<version>` header was introduced in C++20, but libstdc++ provides it
* unconditionally. As documented in SD-6, some macros correspond to features
* in C++17 and earlier standards.
*/
#ifndef _GLIBCXX_VERSION_INCLUDED
#define _GLIBCXX_VERSION_INCLUDED
#ifdef _GLIBCXX_SYSHDR
#pragma GCC system_header
#endif
#define __glibcxx_want_all
#include <bits/version.h>
#endif // _GLIBCXX_VERSION_INCLUDED