// ***************************************************************************** // * This file is part of the FreeFileSync project. It is distributed under * // * GNU General Public License: https://www.gnu.org/licenses/gpl-3.0 * // * Copyright (C) Zenju (zenju AT freefilesync DOT org) - All Rights Reserved * // ***************************************************************************** #ifndef LEGACY_COMPILER_H_839567308565656789 #define LEGACY_COMPILER_H_839567308565656789 #include //contains all __cpp_lib_ macros #include /* C++ standard conformance: https://en.cppreference.com/w/cpp/feature_test https://en.cppreference.com/w/User:D41D8CD98F/feature_testing_macros https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations MSVC https://docs.microsoft.com/en-us/cpp/overview/visual-cpp-language-conformance GCC https://gcc.gnu.org/projects/cxx-status.html libstdc++ https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html Clang https://clang.llvm.org/cxx_status.html Xcode https://developer.apple.com/xcode/cpp libc++ https://libcxx.llvm.org/cxx2a_status.html */ namespace std { //W(hy)TF is this not standard? https://stackoverflow.com/a/47735624 template inline basic_string operator+(basic_string&& lhs, const basic_string_view rhs) { return std::move(lhs.append(rhs.begin(), rhs.end())); } //the move *is* needed!!! //template inline //basic_string operator+(const basic_string& lhs, const basic_string_view& rhs) { return basic_string(lhs) + rhs; } //-> somewhat inefficient: single memory allocation should suffice!!! } //--------------------------------------------------------------------------------- //support for std::string::resize_and_overwrite() #define ZEN_HAVE_RESIZE_AND_OVERWRITE 1 namespace zen { double fromChars(const char* first, const char* last); const char* toChars(char* first, char* last, double num); } #if 0 //neat: supported on MSVC, but not yet on GCC, Clang auto closure = [](this auto&& self) { self(); //just call ourself until the stack overflows //e.g. use for: deleteEmptyFolderTask, removeFolderRecursionImpl, scheduleMoreTasks, traverse }; #endif #endif //LEGACY_COMPILER_H_839567308565656789