Somewhere along the way, GSL's implementation of final_act and finally seems to have become way overthought. This PR is to re-simplify these facilities back to what C++ Core Guidelines C.30 said which is simple and clear and works. It just copies the invocable thing, and doesn't bother trying to optimize the copy. This should be fine, because we're typically passing something that's cheap to copy, often a stateless lambda.
The problem in #846 appears to be because finally looks like was originally written as a const&/&& overload (its state at the time that issue was opened)... to eliminate a copy when you invoke it with a temporary. If so, then the && was probably never intended to be a forwarder, but an rvalue reference that tripped over the horrid C++ syntax collision where a && parameter magically instead means a forwarding reference because the type happens to be a template parameter type here. So I suspect the original author was just trying to write an rvalue overload, and the forwarder that's there now was never intended at all.
In the implementation of gsl::narrow, there is a comparison `static_cast<U>(t) != u` which may be comparing two floats.
The comparison here is done purposefully to categorize ill effects of narrowing conversion, since the values being compared *should* be the same when compared with `operator==`.
Note, using #pragma GCC will suppress this warning for both GCC and Clang.
* move span specialization of 'at' to <gsl/span> and update the parameter to be taken by reference
* undid previous changes and acted upon decisions made in maintainer sync. Fixed tests failing in /kernel mode
* ran clang-format on the include folder
* ran clang-format on the test folder
Co-authored-by: Jordan Maples <jordan.maples@microsoft.com>
* Added c++17 test configurations for clang5.0 and clang6.0
* Fix#739 correct cppcorecheck warnings for clang-cl
* Add clang-cl configurations
* Corrections Appveyor;
Temporarily disable msvc compilation for faster testing (#741)
* Add path to clang-cl.exe (#741)
* Escape backslash in path (#741)
* Update vcpkg (#741)
* Check vcpkg version; try without building vcpkg; use latest clang-cl from path (#741)
* Fix blocks in ps script (#741)
* Try accessing APPVEYOR_BUILD_FOLDER variable (#471)
* Update span size() bug confirmation test for GCC 6.5 (#741)
* MSVC flags to Clang-cl; disable c++98-compat and undefined macro warnings (#741)
* Suppress clang warning on tests (missing-prototypes) (#741)
* Fix clang warning -Wnewline-eof (#741)
* Fix clang warning -Wdouble-promotion (#741)
* Set linker explicitly
* Clean condition statement
* For Clang, fallback to the AppVeyor installed version of CMake
* Fix clang warning -Wmissing-variable-declarations
* Fallback to the MSVC linker until vcpkg has been updated
* Revert "Fallback to the MSVC linker until vcpkg has been updated"
This reverts commit 7263f3289e.
* Fix clang warning -Wunused-member-function
* Fix clang warning -Wmissing-noreturn
* Fix clang warning -Winvalid-noreturn on Windows
* Add macro block end comment on large #if blocks
* Workaround: fallback to mscv link.exe
* Workaround: get msvc paths into PowerShell through intermediate file
* Workaround: fix, remove "PATH=" from text
* Workaround: try with full-path; and return user PATH
* Workaround: fix, escape backslashes
* Revert all since "Workaround: fallback to mscv link.exe" did not work on AppVeyor
This reverts the commits:
bda3d6a42897062933ac0f4fb04bac1b0c19afd1a5739ea5f0
* Suppress output of git pull; remove vcpkg from cache
* Re-enable AppVeyor builds for all platforms
* Correct typo
Co-Authored-By: Farwaykorse <Farwaykorse@users.noreply.github.com>
* Add Clang-cl 7.0.0 to the supported platforms
* Revert "Fix clang warning -Wunused-member-function"
This reverts commit 6fe1a42035.
* Fix or locally suppress clang warning -Wunused-member-function
* format touched code and correct comment
* git pull --quiet
* fix logic error in workaround
* fix missing bracket
* Suppress output of mkdir
* Replace MSBuild with Ninja
* Suppress output of 7z
* Add architecture flags for Clang
* Drop workaround for lld-link
* 7-zip Overwrite and Alternative output suppression without suppressing errors
Replaces 3c1c0794dd
* AppVeyor setup and CMake before build
* reorder compiler configuration
* remove unnecessary
* remove -fno-strict-aliasing
* remove -Wsign-conversion, since before v4.0 part of -Wconversion
* -Wctor-dtor-privacy is GCC only
* remove -Woverloaded-virtual part of -Wmost, part of -Wall
* add -Wmissing-noreturn
* remove the pragmas for -Wunused-member-function
* Re-add MSBuild generator on AppVeyor
* Print CMake commands
* Add MSBuild toolset selection
* Separate Architecture setting
* clang-cl: add -Weverything
* clang-cl -Wno-c++98-compat
* clang-cl -Wno-c++98-compat-pedantic
* clang-cl -Wno-missing-prototypes
* clang-cl C++14 -Wno-unused-member-function
* clang-cl -Wundef __GNUC__
* clang++: add -Weverything
* clang++ -Wno-c++98-compat
* clang++ -Wno-c++98-compat-pedantic
* clang++ -Wno-missing-prototypes
* clang++ -Wno-weak-vtables
* clang++ C++14 -Wno-unused-member-function
* clang++ fix -Wundef _MSC_VER
* clang++ -Wno-padded
* clang++ solve -Wdeprecated
* Add AppleClang compiler target
Since CMake v3.0 use of Clang for both is deprecated
* clang++ v5.0 C++17 -Wno-undefined-func-template
* Add VS2015 + LLVM/clang-cl to AppVeyor
* Do not disable constexpr when compiling with clang-cl on Windows
* Clean-up clang-only warnings (now under -Weverything)
* Revert "Fix clang warning -Winvalid-noreturn on Windows"
This reverts commit 2238c4760e.
* Suppress -Winvalid-noreturn for the MS STL noexception workaround
* CMake: put preprocessor definition in target_compile_definitions
* Solve compiler warning C4668: __GNUC__ not defined
* Added c++17 test configurations for clang5.0 and clang6.0
* Fixed CppCoreCheck warnings in GSL and tests
- Added CMakeSettings.json for VS Open Folder configuration
- So we can easily run CppCoreCheck in VS
- Fixed CppCorecheck warnings where it made sense
- Suppressed the rest
- Some suppression does not work due to compiler/tool bugs,
so replaced by #pragma disable
- CppCoreCheck has noise, suppressed those with comments
- Catch produces many warnings, blanket-supressed them all
- Had to fix clang formatting to keep attributes in place
- clang-format does not support attributes, so I am using
- "CommentPragmas: '^ NO-FORMAT:'" to skip formatiting on them
- Removed GSL_NOEXCEPT macro, removed incorred noexcepts
* Ignore unknown attributes
* ignore unknown attributes in noexception mode tests
* fixed C26472 in at()
* created GSL_SUPPRESS macro to allow all compilers to parse suppression attributes
* try to fix gcc compilation problems with attributes
* ignore gsl::suppress for gcc
* move suppression to function level on return statements
clang5.0 and up does not allow attributes on return statemets in constexpr functions
* move suppression to function level on return statements
* use GSL_SUPPRESS in algorithm_tests
* Addressed PR comments
Project files were not following the clang-format style. For people
using IDEs were clang-format is always run after a save this would
cause unwanted changes.
This commit only applies "clang-format -i" to files.
* Improve const correctness in string_span
* Improve const correctness in bounds_tests.cpp and byte_tests.cpp
* Improve const correctness in span_tests.cpp
* Improve const correctness in utils_tests.cpp
* Use gsl::owner for dynamically allocated memory in string_span_tests.cpp
* Improve const correctness in string_span_tests.cpp
* Improve const correctness for strided_span_tests.cpp
When turning on the following flags, several additional warnings
were generated, which have been cleaned up in this patch. The
flags included:
-Wextra
-Wpedantic
-Wconversion
-Wsign-conversion
-Wctor-dtor-privacy
-Wshadow
-Wnon-virtual-dtor
-Wold-style-cast
-Wcast-align
-Woverloaded-virtual
whether using it from the development folder, from the installation
folder or from being copied into a project.
#include <gsl/gsl.h>
Updated headers/tests/instructions/cmake build accordingly
This PR should address https://github.com/Microsoft/GSL/issues/277 (less
the renaming of gsl itself)