-
-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Use 3rdparty Optional, name it akOptional
The 3rd party Optional has full interface of the C++17 optional, so migration will be easier eventualy. Also don't inject it to the std namespace (which is against the rules), instead we roll our own typedef called akOptional.
- Loading branch information
Showing
17 changed files
with
2,838 additions
and
22 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| # Empty for now | ||
|
|
||
| # Don't add Optional, it has install() rules that we don't want (yet) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,46 @@ | ||
| # if CMAKE_VERSION >= 3.0 this project installs an INTERFACE target for | ||
| # the optional.hpp file. | ||
| # | ||
| # Usage: | ||
| # | ||
| # In your project's CMakeLists.txt: | ||
| # | ||
| # find_package(akrzemi1_optional REQUIRED) | ||
| # ... | ||
| # target_link_libraries(mytarget ... akrzemi1::optional ...) | ||
| # | ||
| # In your C++ source file: | ||
| # | ||
| # #include "akrzemi1/optional.hpp" | ||
| # | ||
|
|
||
| project(optional) | ||
| cmake_minimum_required(VERSION 2.8) | ||
| enable_testing() | ||
|
|
||
| if(CMAKE_VERSION VERSION_LESS 3.1) | ||
| set(CMAKE_CXX_FLAGS "-std=c++11") | ||
| elseif(NOT CMAKE_CXX_STANDARD) # don't override c++ standard if already set | ||
| set(CMAKE_CXX_STANDARD 11) | ||
| endif() | ||
|
|
||
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra") | ||
|
|
||
| # if CMAKE_VERSION >= 3.0 | ||
| if(NOT (CMAKE_VERSION VERSION_LESS 3.0)) | ||
| add_library(optional INTERFACE) | ||
| target_include_directories(optional INTERFACE | ||
| $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> | ||
| $<INSTALL_INTERFACE:include>) | ||
| install(TARGETS optional EXPORT optional-targets) | ||
| install(EXPORT optional-targets DESTINATION lib/cmake/akrzemi1_optional | ||
| FILE akrzemi1_optional-config.cmake | ||
| NAMESPACE akrzemi1::) | ||
| install(FILES optional.hpp DESTINATION include/akrzemi1) | ||
| endif() | ||
|
|
||
| add_executable(test_optional test_optional.cpp) | ||
| add_executable(test_type_traits test_type_traits.cpp) | ||
|
|
||
| add_test(test_optional test_optional) | ||
| add_test(test_type_traits test_type_traits) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,23 @@ | ||
| Boost Software License - Version 1.0 - August 17th, 2003 | ||
|
|
||
| Permission is hereby granted, free of charge, to any person or organization | ||
| obtaining a copy of the software and accompanying documentation covered by | ||
| this license (the "Software") to use, reproduce, display, distribute, | ||
| execute, and transmit the Software, and to prepare derivative works of the | ||
| Software, and to permit third-parties to whom the Software is furnished to | ||
| do so, all subject to the following: | ||
|
|
||
| The copyright notices in the Software and this entire statement, including | ||
| the above license grant, this restriction and the following disclaimer, | ||
| must be included in all copies of the Software, in whole or in part, and | ||
| all derivative works of the Software, unless such copies or derivative | ||
| works are solely in the form of machine-executable object code generated by | ||
| a source language processor. | ||
|
|
||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT | ||
| SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE | ||
| FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, | ||
| ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
| DEALINGS IN THE SOFTWARE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,23 @@ | ||
| Boost Software License - Version 1.0 - August 17th, 2003 | ||
|
|
||
| Permission is hereby granted, free of charge, to any person or organization | ||
| obtaining a copy of the software and accompanying documentation covered by | ||
| this license (the "Software") to use, reproduce, display, distribute, | ||
| execute, and transmit the Software, and to prepare derivative works of the | ||
| Software, and to permit third-parties to whom the Software is furnished to | ||
| do so, all subject to the following: | ||
|
|
||
| The copyright notices in the Software and this entire statement, including | ||
| the above license grant, this restriction and the following disclaimer, | ||
| must be included in all copies of the Software, in whole or in part, and | ||
| all derivative works of the Software, unless such copies or derivative | ||
| works are solely in the form of machine-executable object code generated by | ||
| a source language processor. | ||
|
|
||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT | ||
| SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE | ||
| FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, | ||
| ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
| DEALINGS IN THE SOFTWARE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,39 @@ | ||
| Optional | ||
| ======== | ||
|
|
||
| A single-header header-only library for representing optional (nullable) objects for C++14 (and C++11 to some extent) and passing them by value. This is the reference implementation of proposal N3793 (see http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3793.html). Optional is now accepted into Library Fundamentals Technical Specification (see http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3848.html). The interface is based on Fernando Cacciola's Boost.Optional library (see http://www.boost.org/doc/libs/1_52_0/libs/optional/doc/html/index.html) | ||
|
|
||
|
|
||
| Usage | ||
| ----- | ||
|
|
||
| ```cpp | ||
| optional<int> readInt(); // this function may return int or a not-an-int | ||
|
|
||
| if (optional<int> oi = readInt()) // did I get a real int | ||
| cout << "my int is: " << *oi; // use my int | ||
| else | ||
| cout << "I have no int"; | ||
| ``` | ||
|
|
||
| For more usage examples and the overview see http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3527.html | ||
|
|
||
|
|
||
| Supported compilers | ||
| ------------------- | ||
|
|
||
| Clang 3.2, Clang 3.4, G++ 4.7.2, G++ 4.8.1. Tested only with libstdc++, versions 20130531, 20120920, 20110428. Others have reported it also works with libc++. | ||
|
|
||
|
|
||
|
|
||
| Known Issues | ||
| ------------ | ||
|
|
||
| - Currently, the reference (and the only known) implementation of certain pieces of functionality explore what C++11 identifies as undefined behavior (see national body comment FI 15: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3770.html#FI15). This is mostly why Optional was removed from C++14 and put into Library Fundamentals TS. Luckily what the Standard identifies as UB is well defined on all known platforms. We expect that the C++14 wil fix this problem, so that our trick becomes well-defined. | ||
| - In libstdc++ versions below 20130531 the constructor taking `initializer_list` argument is not `constexpr`. This is because `initializer_list` operations are not `constexpr` in C++11. This works however in version 20130531. It is also not enabled for libc++ because I do not have access to it and do not know if it provides `constexpr` `initializer_list`. | ||
| - In G++ 4.7.2 and 4.8.0 member function `value_or` does not have rvalue reference overload. These compilers do not support rvalue overloding on `*this`. | ||
| - In order for the library to work with slightly older compilers, we emulate some missing type traits. On some platforms we cannot correctly detect the available features, and attempts at workarounds for missing type trait definitions can cause compile-time errors. Define macro `TR2_OPTIONAL_DISABLE_EMULATION_OF_TYPE_TRAITS` if you know that all the necessary type traits are defined, and no emulation is required. | ||
|
|
||
| License | ||
| ------- | ||
| Distributed under the [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| Copyright (C) 2011-2016 Andrzej Krzemienski | ||
|
|
||
| Distributed under the Boost Software License, Version 1.0 | ||
| (see accompanying file LICENSE_1_0.txt or a copy at | ||
| http://www.boost.org/LICENSE_1_0.txt) | ||
|
|
||
| The idea and interface is based on Boost.Optional library | ||
| authored by Fernando Luis Cacciola Carballal | ||
|
|
||
| Home at https://github.com/akrzemi1/Optional |
Oops, something went wrong.