Skip to content

Commit 23cc690

Browse files
committed
Increase required C++ standard to C++20, remove USE_CXX17
1 parent 3883208 commit 23cc690

File tree

2 files changed

+6
-50
lines changed

2 files changed

+6
-50
lines changed

CMakeLists.txt

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,24 +27,18 @@ include(MaximumWarnings)
2727
include(ClangTidy)
2828

2929
option(USE_LOCALE "Use C++ locale support" OFF)
30-
option(USE_CXX17 "Use C++17 features" OFF)
31-
32-
if(USE_CXX17)
33-
# for std::from_chars()
34-
add_definitions(-DSEXP_USE_CXX17)
35-
endif()
3630

3731
if(USE_LOCALE)
3832
add_definitions(-DSEXP_USE_LOCALE)
3933
endif()
4034

35+
set(CMAKE_CXX_STANDARD 20)
36+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
37+
set(CMAKE_CXX_EXTENSIONS OFF)
38+
4139
file(GLOB SEXP_SOURCES src/*.cpp)
4240
file(GLOB SEXP_HEADER_SOURCES include/sexp/*.hpp)
4341
add_library(sexp STATIC ${SEXP_SOURCES})
44-
set_property(TARGET sexp
45-
PROPERTY CXX_STANDARD 17
46-
PROPERTY CXX_STANDARD_REQUIRED ON
47-
PROPERTY CXX_EXTENSIONS OFF)
4842
set_target_properties(sexp PROPERTIES PUBLIC_HEADER "${SEXP_HEADER_SOURCES}")
4943
target_compile_options(sexp PRIVATE ${WARNINGS_CXX_FLAGS})
5044
target_include_directories(sexp SYSTEM PUBLIC
@@ -65,10 +59,6 @@ if(BUILD_TESTS)
6559
# build sexp tests
6660
file(GLOB TEST_SEXP_SOURCES tests/*.cpp)
6761
add_executable(test_sexp ${TEST_SEXP_SOURCES})
68-
set_property(TARGET test_sexp
69-
PROPERTY CXX_STANDARD 17
70-
PROPERTY CXX_STANDARD_REQUIRED ON
71-
PROPERTY CXX_EXTENSIONS OFF)
7262
target_compile_options(test_sexp PRIVATE ${WARNINGS_CXX_FLAGS})
7363
target_include_directories(test_sexp PUBLIC src/)
7464
target_link_libraries(test_sexp
@@ -92,10 +82,6 @@ if(BUILD_BENCHMARKS)
9282
foreach(SOURCE ${BENCHMARKSOURCES})
9383
get_filename_component(SOURCE_BASENAME ${SOURCE} NAME_WE)
9484
add_executable(${SOURCE_BASENAME} ${SOURCE})
95-
set_property(TARGET ${SOURCE_BASENAME}
96-
PROPERTY CXX_STANDARD 17
97-
PROPERTY CXX_STANDARD_REQUIRED ON
98-
PROPERTY CXX_EXTENSIONS OFF)
9985
target_link_libraries(${SOURCE_BASENAME}
10086
sexp
10187
benchmark::benchmark

src/float.cpp

Lines changed: 2 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,15 @@
1717

1818
#include "float.hpp"
1919

20-
#ifdef SEXP_USE_CXX17
21-
# include <charconv>
22-
# include <assert.h>
23-
#endif
24-
20+
#include <cassert>
21+
#include <charconv>
2522
#include <limits>
2623
#include <sstream>
2724

2825
namespace sexp {
2926

3027
float string2float(const std::string& text)
3128
{
32-
#ifdef SEXP_USE_CXX17
3329
char const* start = text.data();
3430

3531
// A leading + (e.g. "+5") is not accepted by from_chars(), so skip it
@@ -41,41 +37,15 @@ float string2float(const std::string& text)
4137
[[maybe_unused]] auto err = std::from_chars(start, text.data() + text.size(), result);
4238
assert(err.ec == std::errc());
4339
return result;
44-
#else
45-
# ifdef SEXP_USE_LOCALE
46-
std::istringstream in(text);
47-
in.imbue(std::locale::classic());
48-
49-
float value;
50-
in >> value;
51-
52-
return value;
53-
# else
54-
return strtof(text.c_str(), nullptr);
55-
# endif
56-
#endif
5740
}
5841

5942
void float2string(std::ostream& os, float value)
6043
{
61-
#ifdef SEXP_USE_CXX17
6244
constexpr size_t len = 32;
6345
char buffer[len];
6446
auto result = std::to_chars(buffer, buffer + len, value);
6547
assert(result.ec == std::errc());
6648
os.write(buffer, result.ptr - buffer);
67-
#else
68-
auto precision = os.precision(std::numeric_limits<float>::digits10 + 1);
69-
# ifdef SEXP_USE_LOCALE
70-
const auto& loc = os.getloc();
71-
os.imbue(std::locale::classic());
72-
os << value;
73-
os.imbue(loc);
74-
# else
75-
os << value;
76-
# endif
77-
os.precision(precision);
78-
#endif
7949
}
8050

8151
} // namespace sexp

0 commit comments

Comments
 (0)