head 1.1; branch 1.1.1; access ; symbols gcc-14-3-0:1.1.1.1 FSF:1.1.1; locks ; strict; comment @# @; 1.1 date 2025.09.13.23.45.49; author mrg; state Exp; branches 1.1.1.1; next ; commitid KwhwN4krNWa6XBaG; 1.1.1.1 date 2025.09.13.23.45.49; author mrg; state Exp; branches ; next ; commitid KwhwN4krNWa6XBaG; desc @@ 1.1 log @Initial revision @ text @// -*- C++ -*- // Copyright The GNU Toolchain Authors. // // 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 // . /** @@file include/experimental/synchronized_value * This is a TS C++ Library header. * @@ingroup libfund-ts */ #ifndef _GLIBCXX_EXPERIMENTAL_SYNCVAL #define _GLIBCXX_EXPERIMENTAL_SYNCVAL 1 #pragma GCC system_header #include // for std::mutex #if __cplusplus >= 201703L #include #include namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION namespace experimental::inline concurrency_v2 { #define __cpp_lib_concurrency_v2_synchronized_value 202302 template class synchronized_value { // TODO: Use partial specialization after PR c++/71954 is fixed. template static inline constexpr bool __is_self = sizeof...(_Args) == 1 && (is_same_v<__remove_cvref_t<_Args>, synchronized_value> && ...); #if ! __cpp_concepts template using __not_self = bool_constant>; #endif public: synchronized_value(const synchronized_value&) = delete; synchronized_value& operator=(const synchronized_value&) = delete; #if __cpp_concepts template requires (!__is_self<_Args...>) && is_constructible_v<_Tp, _Args...> #else template>, typename = _Require>> #endif synchronized_value(_Args&&... __args) noexcept(is_nothrow_constructible_v<_Tp, _Args...>) : _M_val(std::forward<_Args>(__args)...) { } template friend invoke_result_t<_Fn, _Up&, _Types&...> apply(_Fn&&, synchronized_value<_Up>&, synchronized_value<_Types>&...); private: mutex _M_mut; _Tp _M_val; }; template inline invoke_result_t<_Fn, _Tp&, _Types&...> apply(_Fn&& __f, synchronized_value<_Tp>& __val, synchronized_value<_Types>&... __vals) { scoped_lock __l(__val._M_mut, __vals._M_mut...); return std::__invoke(std::forward<_Fn>(__f), __val._M_val, __vals._M_val...); } } // namespace experimental::concurrency_v2 _GLIBCXX_END_NAMESPACE_VERSION } // namespace std #endif // C++20 #endif // _GLIBCXX_EXPERIMENTAL_SYNCVAL @ 1.1.1.1 log @initial import of GCC 14.3.0. major changes in GCC 13: - improved sanitizer - zstd debug info compression - LTO improvements - SARIF based diagnostic support - new warnings: -Wxor-used-as-pow, -Wenum-int-mismatch, -Wself-move, -Wdangling-reference - many new -Wanalyzer* specific warnings - enhanced warnings: -Wpessimizing-move, -Wredundant-move - new attributes to mark file descriptors, c++23 "assume" - several C23 features added - several C++23 features added - many new features for Arm, x86, RISC-V major changes in GCC 14: - more strict C99 or newer support - ia64* marked deprecated (but seemingly still in GCC 15.) - several new hardening features - support for "hardbool", which can have user supplied values of true/false - explicit support for stack scrubbing upon function exit - better auto-vectorisation support - added clang-compatible __has_feature and __has_extension - more C23, including -std=c23 - several C++26 features added - better diagnostics in C++ templates - new warnings: -Wnrvo, Welaborated-enum-base - many new features for Arm, x86, RISC-V - possible ABI breaking change for SPARC64 and small structures with arrays of floats. @ text @@